Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Selamat untuk Mengakses `c_str()` Objek `std::string` Sementara?

Adakah Selamat untuk Mengakses `c_str()` Objek `std::string` Sementara?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 19:10:03204semak imbas

Is It Safe to Access the `c_str()` of a Temporary `std::string` Object?

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!

Kenyataan:
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