Adakah Selamat untuk Mengakses c_str() Rentetan Sementara?
Dalam program C, kod berikut menimbulkan kebimbangan:
void consumer(char const* p) { std::printf("%s", p); } std::string random_string_generator(); consumer(random_string_generator().c_str());
Adalah dikatakan bahawa objek std::string sementara yang dijana oleh random_string_generator mungkin dimusnahkan sebelum panggilan kepada pengguna, yang berpotensi menyebabkan penunjuk c_str() tidak sah. Walau bagaimanapun, adalah penting untuk memahami definisi piawai bagi временной переменных seumur hidup.
Menurut Piawaian C, penunjuk yang dikembalikan oleh std::string::c_str() kekal sah sehingga fungsi bukan const digunakan pada objek std::string atau ia dimusnahkan. Dalam kod yang diberikan, objek std::string sementara akan dimusnahkan pada penghujung ungkapan penuh, yang termasuk panggilan kepada pengguna. Ini mengesahkan bahawa kod itu dibentuk dengan baik.
Selagi pengguna tidak cuba mengekalkan penunjuk c_str() untuk kegunaan kemudian, adalah selamat untuk menganggap bahawa objek std::string sementara tidak akan dimusnahkan sebelum waktunya. Jangka hayat sementara telah ditakrifkan dengan tepat sejak C 98, memastikan kod seperti yang dibentangkan akan dilaksanakan dengan selamat merentas pengkompil yang berbeza.
Atas ialah kandungan terperinci Adakah Selamat untuk Mengakses `c_str()` Objek `std::string` Sementara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!