Std::string est-il stocké de manière contiguë et terminé par un caractère nul en C 11 ?
Dans une discussion précédente, des inquiétudes ont été soulevées concernant la mémoire disposition et terminaison nulle de std::string en C 0x. Herb Sutter a proposé d'exiger la terminaison nulle et d'interdire les implémentations de copie sur écriture pour des raisons de concurrence.
C 11 garantit un stockage contigu
Comme mentionné dans la question, C 11 garantit que le contenu de std::string est stocké de manière contiguë. Cependant, la question reste sans réponse de savoir si les propositions concernant la résiliation nulle ont été adoptées dans le projet final de C 11.
Résiliation nulle dans C 11
Conformément au C 11 standard [string.accessors] p1, std::basic_string::c_str() déclare :
"Renvoie un pointeur p tel que p i == &operator[](i) pour chaque i dans [0,size()]",
signifiant le pointeur renvoyé par s. c_str() est équivalent à l'adresse du caractère initial de la chaîne (&s[0]). Par conséquent, std::string est garanti comme étant terminé par un caractère nul en C 11.
Implications d'utilisation
La garantie de terminaison nulle signifie qu'il est sûr d'utiliser &str[ 0] pour accéder au premier caractère d'un std::string en C 11, garantissant ainsi la compatibilité avec le code existant qui repose sur ce comportement.
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!