Maison >développement back-end >C++ >Est-ce que std::string est toujours terminé par une valeur nulle en C 11 ?

Est-ce que std::string est toujours terminé par une valeur nulle en C 11 ?

DDD
DDDoriginal
2024-12-17 08:59:23811parcourir

Is std::string Always Null-Terminated in C  11?

Std::string est-il terminé par une valeur nulle en C 11 ?

En 2008, Herb Sutter a proposé de resserrer l'implémentation de la chaîne en C 0x pour exiger terminaison nulle. Cependant, la norme C 11 inclut une approche différente :

Oui, std::string est toujours terminé par un caractère nul en C 11.

La norme précise que le pointeur renvoyé par std::basic_string::c_str() sera égal à l'adresse du caractère initial de la chaîne (&s[0]). Par conséquent, il est sûr d'utiliser &str[0] en C 11.

Conséquences :

  • L'utilisation de &str[0] offre désormais un moyen sûr et efficace pour accéder aux caractères de chaîne sous-jacents.
  • La garantie de terminaison nulle simplifie l'interopérabilité avec les API et les données de style C structures.
  • Cependant, cela n'implique pas que std::string est une implémentation de copie sur écriture. L'implémentation peut toujours choisir d'optimiser les performances via la copie sur écriture ou d'autres stratégies qui préservent la terminaison nulle.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn