Rumah >pembangunan bahagian belakang >C++ >Adakah Nilai Pulangan `std::initializer_list` Sepanjang Hayat Dilanjutkan ke dalam Fungsi Panggilan?
Soalan:
Mengikut standard C, apabila fungsi mengembalikan senarai pemula, adakah jangka hayat tatasusunan asasnya dilanjutkan ke dalam fungsi panggilan?
Piawaian C menyatakan bahawa jangka hayat objek std::initializer_list adalah sama dengan objek yang dimulakan. Apabila fungsi mengembalikan senarai pemula, ia memulakan objek nilai pulangan. Walau bagaimanapun, terdapat dua contoh senarai pemula yang terlibat: satu dalam fungsi dan satu dalam kod panggilan.
Contoh dalam piawaian menunjukkan bahawa jangka hayat tatasusunan memanjang ke objek yang disalin, yang akan membayangkan bahawa tatasusunan nilai pulangan juga harus bertahan dalam fungsi panggilan. Walau bagaimanapun, ini tidak berlaku dalam amalan.
Jawapan:
Pada masa ini, tingkah laku sepanjang hayat nilai pulangan std::initializer_list tidak ditakrifkan dengan jelas dalam piawaian C. Pengkompil yang berbeza melaksanakannya secara berbeza:
Kesimpulannya, pada masa ini tidak mungkin untuk bergantung pada hayat std:: nilai pulangan initializer_list meluas ke dalam fungsi panggilan. Elakkan menggunakan std::initializer_list untuk menghantar nilai, kerana ia boleh membawa kepada tingkah laku yang tidak dijangka.
Nota Tambahan:
DR 1290 mengubah suai perkataan standard dan DR 1565 dan 1599, yang masih terbuka, menangani isu berkaitan. Walau bagaimanapun, semantik masih ditakrifkan dan pengkompil akan mengambil masa untuk melaksanakan perubahan terakhir.
Atas ialah kandungan terperinci Adakah Nilai Pulangan `std::initializer_list` Sepanjang Hayat Dilanjutkan ke dalam Fungsi Panggilan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!