Rumah >pembangunan bahagian belakang >C++ >Berapa Lama Talian C Sementara Hidup?
Coretan kod di bawah soalan melibatkan pengembalian objek std::string sementara daripada fungsi foo() dan seterusnya menggunakan bar( ) dengan penunjuk c_str() sementara. Kebimbangan berpunca daripada andaian bahawa sementara akan dimusnahkan sebelum bar() dilaksanakan.
Walau bagaimanapun, andaian ini tidak betul. Menurut standard bahasa C, objek sementara wujud sehingga ungkapan penuh yang disertainya lengkap. Konsep ini digambarkan dalam struktur kod berikut:
____________________ range of full expression bar( foo().c_str() ); ^^^^^ ^ | | birth funeral
Dalam contoh ini, jangka hayat sementara yang dikembalikan oleh foo() bermula daripada penciptaannya pada titik yang dilabelkan "kelahiran" hingga kemusnahannya pada "pengkebumian. ." Pemusnahan ini berlaku selepas panggilan ke bar(), bukan sebelum seperti yang difikirkan pada mulanya.
Peraturan tepat menyatakan bahawa objek sementara dimusnahkan apabila ungkapan penuh yang secara leksikal mengandungi nilai r (ungkapan sebelah kanan) bertanggungjawab untuk menciptanya selesai menilai. Dalam kod yang diberikan, ungkapan penuh ini ialah panggilan fungsi itu sendiri, bar( foo().c_str() ). Oleh itu, objek sementara terus wujud sehingga panggilan ini selesai, memastikan bar() boleh mengakses penuding c_str()nya.
Atas ialah kandungan terperinci Berapa Lama Talian C Sementara Hidup?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!