Rumah >pembangunan bahagian belakang >C++ >Adakah std::string Disimpan Bersebelahan dan Null-Ditamatkan dalam C 11?
Adakah std::string Disimpan Bersebelahan dan Null-Ditamatkan dalam C 11?
Dalam perbincangan sebelum ini, kebimbangan telah dibangkitkan mengenai ingatan susun atur dan penamatan nol std::string dalam C 0x. Herb Sutter dicadangkan menghendaki penamatan batal dan melarang pelaksanaan salin-tulis atas sebab-sebab bersamaan.
C 11 Menjamin Penyimpanan Bersebelahan
Seperti yang dinyatakan dalam soalan, C 11 memastikan bahawa kandungan std::string disimpan bersebelahan. Walau bagaimanapun, persoalannya masih tidak terjawab sama ada cadangan mengenai penamatan batal telah diterima pakai dalam draf akhir C 11.
Penamatan Batal dalam C 11
Per the C 11 standard [string.accessors] p1, std::basic_string::c_str() menyatakan:
"Mengembalikan penunjuk p supaya p i == &operator[](i) untuk setiap i dalam [0,size()],"
bermaksud penuding dikembalikan oleh s. c_str() adalah bersamaan dengan alamat aksara awal dalam rentetan (&s[0]). Oleh itu, std::string dijamin akan dibatalkan dalam C 11.
Implikasi Penggunaan
Jaminan penamatan batal bermakna ia selamat digunakan &str[ 0] untuk mengakses aksara pertama std::string dalam C 11, memastikan keserasian dengan kod warisan yang bergantung pada ini tingkah laku.
Atas ialah kandungan terperinci Adakah std::string Disimpan Bersebelahan dan Null-Ditamatkan dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!