Memahami Temporary Object Lifetime dengan Const Rujukan
Pengenalan:
Dalam C , the lifetime objek sementara lazimnya dilanjutkan hanya sehingga akhir ungkapan di mana ia dicipta. Walau bagaimanapun, pengecualian timbul apabila objek sementara terikat kepada rujukan const, memanjangkan jangka hayatnya melebihi skop asal.
Siasatan Khusus:
Mengapa kod berikut menyusun dan laksanakan dengan jayanya, walaupun rentetan yang dikembalikan daripada fungsi foo ialah objek sementara?
<code class="cpp">string foo() { return string("123"); } int main() { const string& val = foo(); printf("%s\n", val.c_str()); return 0; }</code>
Jawapan:
Piawaian C secara jelas mentakrifkan bahawa mengikat objek sementara kepada rujukan kepada const pada tindanan memanjangkan hayat sementara sehingga hayat rujukan itu sendiri. Oleh itu, dalam kod yang disediakan, rentetan sementara yang dikembalikan oleh foo() kekal hidup sehingga pendakap penutup fungsi utama.
Mekanisme:
Ciri ini memastikan bahawa rujukan kepada objek sementara tidak menjadi rujukan berjuntai, yang akan mengakibatkan tingkah laku yang tidak ditentukan. Walaupun objek sementara terikat pada rujukan const, memorinya disematkan dengan berkesan, membolehkan atur cara terus menggunakannya dengan selamat.
Penghadan:
Adalah penting untuk ambil perhatian bahawa sambungan seumur hidup ini hanya digunakan pada rujukan berasaskan tindanan. Sebaliknya, rujukan yang merupakan ahli objek tidak memanjangkan hayat objek sementara.
Maklumat Tambahan:
Untuk perbincangan yang lebih terperinci mengenai topik ini, rujuk GotW #88: Calon Untuk "Konst Paling Penting" oleh Herb Sutter.
Atas ialah kandungan terperinci Mengapa Rujukan Const Memanjangkan Jangka Hayat Objek Sementara dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!