Maison >développement back-end >C++ >Est-ce que std::string en C 11 est garanti avec une terminaison nulle ?
Terminaison nulle dans std::string de C 11
En C, les chaînes sont généralement représentées à l'aide de la classe std::string. Avant C 11, il y avait une ambiguïté quant à savoir si les objets std::string étaient toujours terminés par un caractère nul.
C 11 Garantie de stockage contigieux
En C 11, le La classe std::string a obtenu la garantie que son contenu serait stocké de manière contiguë. Cela répondait à l'une des préoccupations soulevées par Herb Sutter dans son article de 2008.
Adoption de la proposition de résiliation nulle
En ce qui concerne l'exigence de résiliation nulle et l'interdiction de copie -implémentations en écriture, les propositions mentionnées dans l'article de Sutter n'ont pas été entièrement adoptées dans la version finale de C 11.
Sécurité de l'utilisation de &str[0]
Cependant, selon [string.accessors] p1, std::basic_string::c_str():
Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].
Cela signifie que le pointeur renvoyé par s.c_str(), où s est une chaîne, est équivalent à l'adresse du caractère initial de la chaîne (&s[0]).
Par conséquent, en C 11, il est sûr d'utiliser &str[0] pour accéder au premier caractère d'un objet std::string, en supposant qu'il n'est pas modifié par des facteurs externes.
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!