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
942 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!

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