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?

Barbara Streisand
Barbara Streisandasal
2024-12-30 00:42:10990semak imbas

Is std::string Contiguously Stored and Null-Terminated in 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!

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