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

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

Linda Hamilton
Lepaskan: 2024-11-06 19:10:03
asal
277 orang telah melayarinya

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

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!

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