Rumah > pembangunan bahagian belakang > C++ > Adakah `&s[0]` Penunjuk Selamat dan Bersebelahan kepada Aksara dalam C std::string?

Adakah `&s[0]` Penunjuk Selamat dan Bersebelahan kepada Aksara dalam C std::string?

Patricia Arquette
Lepaskan: 2024-12-05 15:41:10
asal
959 orang telah melayarinya

Is `&s[0]` a Safe and Contiguous Pointer to Characters in a C   std::string?

Bolehkah "&s[0]" Merujuk Aksara Berturut-turut dalam std::string?

Telah diperhatikan bahawa kod seperti ini:

std::string s;
s.resize( strLength );
memcpy( &s[0], str, strLength );
Salin selepas log masuk

akan selamat jika s ialah std::vector, tetapi persoalannya ialah sama ada ia adalah penggunaan selamat std::string.

Dalam C 98/03, peruntukan std::string tidak dijamin bersebelahan. Walau bagaimanapun, C 11 menguatkuasakan hubungan ini. Dalam amalan, kebanyakan pelaksanaan menggunakan storan bersebelahan.

Penggunaan &s[0] dijamin oleh standard C 11 untuk berfungsi, walaupun untuk rentetan panjang sifar. Ini kerana operator[] ditakrifkan sebagai:

Returns *(begin() + pos) if pos < size(), otherwise a reference to an object of type T with value charT(); the referenced value shall not be modified
Salin selepas log masuk

Selain itu, data() ditakrifkan sebagai:

Returns: A pointer p such that p + i == &s[i] for each i in [0,size()].
Salin selepas log masuk

Oleh itu, "&s[0]" menunjuk kepada aksara berturut-turut dalam std::string dan merupakan penggunaan yang selamat.

Atas ialah kandungan terperinci Adakah `&s[0]` Penunjuk Selamat dan Bersebelahan kepada Aksara 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