Dalam C , bekerja dengan objek rentetan memberikan nuansa tertentu yang memerlukan pertimbangan yang teliti. Satu contoh sedemikian ialah penggunaan literal rentetan C dalam fungsi std::string, seperti yang ditunjukkan dalam coretan kod di bawah:
<code class="cpp">std::string myFunction() { return "it's me!!"; }</code>
Seperti yang anda nyatakan, pulangan pernyataan dalam std::string constructor secara tersirat memulakan objek rentetan dalamannya dengan tatasusunan aksara const. Objek rentetan yang dikembalikan kemudiannya dirujuk oleh pembolehubah sementara yang akan dialokasikan pada akhir panggilan fungsi.
Walau bagaimanapun, penggunaan rentetan seterusnya memerlukan akses kepada datanya. Kaedah c_str() menyediakan penuding kepada perwakilan rentetan gaya C dalaman.
Kebimbangan anda tentang isu yang mungkin timbul akibat penyerahan lokasi objek rentetan adalah sah. Secara teorinya, memori yang ditunjuk oleh c_str() boleh menjadi tidak sah apabila objek rentetan sementara dimusnahkan. Walau bagaimanapun, dalam amalan, tingkah laku yang diperhatikan adalah berbeza.
Sebab bagi tingkah laku yang tidak dijangka ini terletak pada peranan yang dimainkan oleh sistem pengendalian. Apabila memori dinyahperuntukkan dalam C , sistem pengendalian tidak selalu memadamkan kandungannya dengan serta-merta. Sebaliknya, ia menandakan memori sebagai tersedia untuk kegunaan masa hadapan, menjadikan kandungan masih boleh diakses buat sementara waktu.
Walaupun kod yang anda berikan mungkin kelihatan berfungsi tanpa ralat, ia termasuk dalam kategori tingkah laku yang tidak ditentukan dalam C. Hasil yang tepat boleh berbeza-beza bergantung pada sistem pengendalian tertentu dan persekitaran masa jalan. Untuk memastikan kod yang mantap dan boleh diramal, adalah penting untuk mengikuti amalan terbaik dan elakkan bergantung pada tingkah laku yang tidak ditentukan.
Atas ialah kandungan terperinci Mengapakah kod C saya, mengembalikan literal rentetan daripada fungsi, nampaknya berfungsi walaupun tingkah laku itu tidak ditentukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!