Rumah > pembangunan bahagian belakang > C++ > Adakah `&s[0]` Menjamin Peruntukan Memori Bersebelahan dalam C `std::string`?

Adakah `&s[0]` Menjamin Peruntukan Memori Bersebelahan dalam C `std::string`?

Linda Hamilton
Lepaskan: 2024-12-14 01:55:13
asal
853 orang telah melayarinya

Does `&s[0]` Guarantee Contiguous Memory Allocation in a C   `std::string`?

Mengakses Aksara melalui "&s[0]" dalam std::string

Dalam C , kelas std::string menyediakan cara mudah untuk memanipulasi urutan aksara. Walau bagaimanapun, perwakilan asas data rentetan mungkin berbeza bergantung pada pelaksanaan, yang membawa kepada persoalan tentang keselamatan ingatan.

Soalan:

Adakah menggunakan "&s[0]" untuk akses aksara dalam std::string menjamin memori bersebelahan peruntukan?

Jawapan:

Di bawah piawaian C 98/03, peruntukan memori std::string tidak ditakrifkan secara eksplisit, menyerahkannya kepada pelaksanaan . Walau bagaimanapun, piawaian C 11 mewajibkan storan bersebelahan untuk objek std::string.

Dalam amalan, kebanyakan pelaksanaan, sebelum dan selepas penyeragaman C 11, telah menggunakan storan bersebelahan untuk std::string. Ini bermakna penggunaan "&s[0]" untuk mengakses aksara secara amnya dianggap selamat.

Akses Dijamin Standard:

Menurut piawaian C 11, pengendali[ ] for std::string sentiasa menjamin akses kepada rujukan aksara yang sah. Walaupun dalam kes di mana rentetan kosong, "&s[0]" ditakrifkan untuk menunjuk ke objek dengan nilai charT(), memastikan ia kekal sebagai rujukan memori yang sah.

Ini diperkukuh lagi oleh definisi data() untuk std::string, yang menyatakan bahawa penunjuk "p" yang dikembalikan harus merujuk lokasi memori berturut-turut yang sepadan dengan elemen yang boleh diakses melalui "&operator[](i)" dalam julat yang sah [0,size()].

Nota Sejarah:

Dalam versi terdahulu piawai C 0x, gelagat "&s[0] " dengan rentetan panjang sifar tidak ditentukan. Walau bagaimanapun, prapestandardisasi C 0x dan draf piawai seterusnya telah menjelaskan tingkah laku ini, menjamin bahawa "&s[0]" menunjuk kepada rujukan memori yang sah dalam semua kes.

Atas ialah kandungan terperinci Adakah `&s[0]` Menjamin Peruntukan Memori Bersebelahan dalam C `std::string`?. 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