"&s[0]" peut-il référencer des caractères consécutifs dans une std::string ?
Il a été remarqué que du code comme celui-ci :
std::string s; s.resize( strLength ); memcpy( &s[0], str, strLength );
serait sûr si s était un std::vecteur, mais la question est de savoir s'il s'agit d'une utilisation sûre de std::string.
Dans C 98/03, il n'est pas garanti que l'allocation d'un std::string soit contiguë. Cependant, C 11 impose cette contiguïté. En pratique, la plupart des implémentations utilisent le stockage contigu.
L'utilisation de &s[0] est garantie par la norme C 11 pour fonctionner, même pour les chaînes de longueur nulle. En effet, l'opérateur[] est défini comme :
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
De plus, data() est défini comme :
Returns: A pointer p such that p + i == &s[i] for each i in [0,size()].
Par conséquent, "&s[0]" pointe vers des caractères consécutifs dans un std::string et constitue une utilisation sûre.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!