Maison > développement back-end > C++ > Combien de temps durent les chaînes C temporaires ?

Combien de temps durent les chaînes C temporaires ?

Barbara Streisand
Libérer: 2024-12-10 18:30:11
original
835 Les gens l'ont consulté

How Long Do Temporary C   Strings Live?

Durée de vie des temporaires : démêler les subtilités

L'extrait de code en question implique le retour d'un objet std::string temporaire à partir de la fonction foo() et l'appel ultérieur de bar( ) avec le pointeur c_str() du temporaire. Le problème vient de l'hypothèse selon laquelle le temporaire est détruit avant l'exécution de bar().

Cependant, cette hypothèse est incorrecte. Selon le standard du langage C, un objet temporaire existe jusqu'à ce que l'expression complète à laquelle il participe soit terminée. Ce concept est illustré dans la structure de code suivante :

____________________     range of full expression
bar( foo().c_str() );
     ^^^^^               ^
       |               |
     birth           funeral
Copier après la connexion

Dans cet exemple, la durée de vie du temporaire renvoyé par foo() s'étend de sa création au point étiqueté « naissance » jusqu'à sa destruction à « funérailles ". Cette destruction se produit après l'appel à bar(), pas avant comme on le pensait initialement.

La règle précise stipule qu'un objet temporaire est détruit lorsque l'expression complète qui contient lexicalement la rvalue (expression de droite) responsable de sa création termine son évaluation. Dans le code donné, cette expression complète est l'appel de fonction lui-même, bar( foo().c_str() ). Par conséquent, l'objet temporaire continue d'exister jusqu'à la fin de cet appel, garantissant que bar() peut accéder à son pointeur c_str().

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