Maison > développement back-end > C++ > le corps du texte

Est-il sûr d'utiliser `std::string::c_str()` avec des chaînes temporaires en C ?

Patricia Arquette
Libérer: 2024-11-06 17:51:02
original
806 Les gens l'ont consulté

Is it Safe to Use `std::string::c_str()` with Temporary Strings in C  ?

Pièges potentiels liés à l'utilisation de std::string::c_str() avec des chaînes temporaires

Considérez l'extrait de code C suivant :

void consumer(char const* p) { std::printf("%s", p); }

std::string random_string_generator();

consumer(random_string_generator().c_str());
Copier après la connexion

Ce code pose la question de savoir s'il est bien formé selon le standard C.

Le souci vient du fait que random_string_generator() renvoie un objet std::string temporaire. Nous prenons ensuite le pointeur c_str(), laissant potentiellement l'objet temporaire std::string vulnérable à la destruction avant que le pointeur ne soit utilisé.

Pour comprendre les implications, nous devons nous plonger dans la durée de vie des temporaires en C .

Selon le standard C, la durée de vie d'un temporaire s'étend jusqu'à la fin de l'expression complète dans laquelle il a été créé. Dans ce cas, l’expression complète est l’appel au consommateur. Par conséquent, l'objet temporaire std::string ne sera détruit qu'après la fin de l'exécution de la fonction consommateur.

Ainsi, le pointeur c_str() que nous avons obtenu restera valide tout au long de l'appel au consommateur, ce qui rend notre code bien -formé et sûr à utiliser.

Il est important de noter que cette garantie ne vaut que pour la durée de vie de l'expression complète. Si le pointeur c_str() est stocké et utilisé en dehors de ce contexte, le comportement devient indéfini car l'objet temporaire std::string peut avoir déjà été détruit.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!