Memanggil std::string.c_str() pada Rentetan Sementara
Dalam C , objek sementara dimusnahkan pada penghujung ungkapan penuh di mana ia dicipta. Dalam kod yang diberikan, baris const char* cStr = getString().c_str(); mencipta objek std::string sementara daripada nilai pulangan getString(). Walau bagaimanapun, sementara ini dimusnahkan sebelum penuding cStr boleh menggunakannya.
Untuk membetulkannya, anda boleh sama ada menyimpan sementara dalam pembolehubah bernama atau mengikatnya pada rujukan-nilai const atau rujukan-nilai. Contohnya:
<code class="cpp">std::string s = getString(); // Extended lifetime const char* cStr1 = s.c_str(); std::cout << cStr1 << std::endl; // Safe const std::string& s2 = getString(); // Const lvalue-reference const char* cStr2 = s2.c_str(); std::cout << cStr2 << std::endl; // Safe</code>
Sebagai alternatif, anda boleh menggunakan penunjuk sebelum yang sementara dimusnahkan:
<code class="cpp">std::cout << getString().c_str() << std::endl; // Temporary used immediately</code>
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan kandungan artikel anda: **Terus dan Berfokus:** * **Mengapa Memanggil `std::string.c_str()` pada Rentetan Sementara Membawa kepada Gelagat Tidak Ditakrifkan?** * **. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!