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

Est-il sûr d'accéder au `c_str()` d'un objet `std::string` temporaire ?

Linda Hamilton
Libérer: 2024-11-06 19:10:03
original
204 Les gens l'ont consulté

Is It Safe to Access the `c_str()` of a Temporary `std::string` Object?

Est-il sécuritaire d'accéder au c_str() d'une chaîne temporaire ?

Dans un programme C, le code suivant soulève un problème :

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

On prétend que l'objet temporaire std::string généré par random_string_generator peut être détruit avant l'appel au consommateur, rendant potentiellement le pointeur c_str() invalide. Cependant, il est crucial de comprendre la définition standard de la durée de vie permanente.

Selon la norme C, le pointeur renvoyé par std::string::c_str() reste valide jusqu'à ce qu'une fonction non const soit invoquée. sur l'objet std::string ou il est détruit. Dans le code donné, l'objet temporaire std::string sera détruit à la fin de l'expression complète, qui inclut l'appel au consommateur. Cela confirme que le code est bien formé.

Tant que le consommateur ne tente pas de conserver le pointeur c_str() pour une utilisation ultérieure, il est prudent de supposer que l'objet temporaire std::string ne sera pas détruit prématurément. La durée de vie des temporaires a été définie avec précision depuis C 98, garantissant que du code tel que celui présenté s'exécutera en toute sécurité sur différents compilateurs.

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!