Rumah > pembangunan bahagian belakang > C++ > Berapa Lama Talian C Sementara Hidup?

Berapa Lama Talian C Sementara Hidup?

Barbara Streisand
Lepaskan: 2024-12-10 18:30:11
asal
886 orang telah melayarinya

How Long Do Temporary C   Strings Live?

Lifetime of Temporaries: Membongkar Kerumitan

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan