Rumah >pembangunan bahagian belakang >C++ >Adakah `&s[0]` Penunjuk Selamat dan Bersebelahan kepada Aksara dalam 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 );
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
Selain itu, data() ditakrifkan sebagai:
Returns: A pointer p such that p + i == &s[i] for each i in [0,size()].
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!