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