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

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

Patricia Arquette
Patricia Arquetteasal
2024-10-29 18:29:22656semak imbas

 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:
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