Rumah >pembangunan bahagian belakang >C++ >Mengapakah penunjuk `c_str()` bagi objek rentetan sementara sah dalam `bar()` selepas fungsi ciptaannya `foo()` telah kembali?
Hayat Objek dalam foo() dan bar()
Dalam C , objek yang dicipta semasa panggilan fungsi dianggap sebagai objek sementara. Memahami jangka hayat mereka adalah penting untuk memastikan tingkah laku program yang betul.
Pertimbangkan kod berikut:
std::string foo() { std::string out = something...; return out; } void bar( const char* ccp ) { // do something with the string.. } bar( foo().c_str() );
Soalan:
Mengapa c_str( ) penunjuk objek sementara yang dikembalikan oleh foo() sah dalam fungsi bar() walaupun selepas foo() mempunyai selesai?
Jawapan:
Menurut piawaian C, objek sementara dimusnahkan sebaik sahaja ungkapan penuh yang mengandungi penciptaannya selesai. Dalam kes ini, ungkapan penuh ialah:
bar( foo().c_str() );
Dalam seni ASCII, jangka hayat objek sementara kelihatan seperti ini:
____________________ full-expression ranges from 'b' to last ')' bar( foo().c_str() ); ^^^^^ ^ | | birth funeral
Objek sementara dicipta apabila foo() dipanggil (kelahiran) dan dimusnahkan selepas ungkapan selesai melaksanakan (pengebumian), memastikan bahawa penunjuk c_str() kekal sah sepanjang pelaksanaan bar().
Atas ialah kandungan terperinci Mengapakah penunjuk `c_str()` bagi objek rentetan sementara sah dalam `bar()` selepas fungsi ciptaannya `foo()` telah kembali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!