Rumah > pembangunan bahagian belakang > C++ > Apakah Jangka Hayat Senarai Braced-Init-Dikembalikan daripada Fungsi C?

Apakah Jangka Hayat Senarai Braced-Init-Dikembalikan daripada Fungsi C?

Patricia Arquette
Lepaskan: 2024-10-29 18:29:22
asal
818 orang telah melayarinya

 What is the Lifetime of a Braced-Init-List Returned from a C   Function?

Nilai Pulangan Senarai-Init-Seumur Hidup

Dalam C , mengembalikan senarai-init-disikap daripada fungsi menimbulkan persoalan tentang jangka hayat initializer_list dan tatasusunan pendasarnya.

Garis Masalah

Analisis sebelumnya mencadangkan bahawa GCC salah menamatkan tatasusunan initializer_list sebelum akhir ungkapan kembali, manakala Clang menyimpan objek secara salah tanpa memusnahkannya.

Tafsiran Standard

Menurut piawaian C 11, pernyataan pulangan dengan braced-init-list memulakan nilai pulangan melalui salin-senarai-inisialisasi. Jika jenis pulangan ialah pengkhususan std::initializer_list, objek initializer_list dibina dan dimulakan daripada senarai yang ditentukan.

Array Lifetime

Inisializer_list yang dibina menyimpan a merujuk kepada tatasusunan elemen yang dimulakan daripada senarai pemula. Jangka hayat tatasusunan ditakrifkan sebagai sama dengan objek initializer_list. Ini bermakna bahawa dalam penyataan pulangan, tatasusunan yang mendasari dimulakan daripada senarai braced-init-dan mempunyai seumur hidup yang dilanjutkan ke dalam skop panggilan.

Pelaksanaan Betul

Oleh itu, tingkah laku yang dijangkakan ialah tatasusunan initializer_list harus berterusan ke dalam fungsi panggilan, membenarkan penggunaan selanjutnya atau mengikat kepada rujukan bernama. Walau bagaimanapun, pelaksanaan semasa GCC menyamakan kedudukan tatasusunan secara pra-matang, melanggar jangkaan ini.

Penjelasan Tambahan

  • Memulangkan senarai braced-init-tidak membayangkan salinan- pembinaan objek yang dikembalikan. Ia hanya menggunakan copy-list-initialization untuk memulakan nilai pulangan.
  • DR 1290 telah menyemak semula perkataan yang berkaitan dengan initializer_list seumur hidup dan DR 1565 dan 1599 juga sedang dipertimbangkan, yang berpotensi membawa perubahan selanjutnya.
  • Mengikat rujukan tambahan kepada initializer_list tidak memanjangkan hayat tatasusunan asasnya, sama seperti cara rujukan kepada objek sementara tidak memanjangkan hayat sementara.

Atas ialah kandungan terperinci Apakah Jangka Hayat Senarai Braced-Init-Dikembalikan daripada Fungsi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan