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

Pourquoi les références Const prolongent-elles la durée de vie des objets temporaires en C ?

Linda Hamilton
Libérer: 2024-10-26 16:04:03
original
872 Les gens l'ont consulté

Why Do Const References Extend the Lifetime of Temporary Objects in C  ?

Comprendre la durée de vie d'un objet temporaire avec des références Const

Introduction :

En C, la durée de vie des objets temporaires ne s'étend généralement que jusqu'à la fin de l'expression dans laquelle ils sont créés. Cependant, une exception se produit lorsque des objets temporaires sont liés à des références const, prolongeant leur durée de vie au-delà de la portée d'origine.

Enquête spécifique :

Pourquoi le code suivant est-il compilé et s'exécuter avec succès, même si la chaîne renvoyée par la fonction foo est un objet temporaire ?

<code class="cpp">string foo() {
  return string("123");
}

int main() {
  const string& val = foo();
  printf("%s\n", val.c_str());
  return 0;
}</code>
Copier après la connexion

Réponse :

Le standard C définit explicitement que la liaison d'un objet temporaire à une référence à const sur la pile prolonge la durée de vie du temporaire jusqu'à la durée de vie de la référence elle-même. Ainsi, dans le code fourni, la chaîne temporaire renvoyée par foo() reste active jusqu'à l'accolade fermante de la fonction principale.

Mécanisme :

Cette fonctionnalité garantit que les références à des objets temporaires ne deviennent pas des références pendantes, ce qui entraînerait un comportement indéfini. Bien que l'objet temporaire soit lié à la référence const, sa mémoire est effectivement épinglée, permettant au programme de continuer à l'utiliser en toute sécurité.

Limitations :

Il est important de noter que cette extension de durée de vie s'applique uniquement aux références basées sur la pile. En revanche, les références membres d'objets ne prolongent pas la durée de vie des objets temporaires.

Informations supplémentaires :

Pour une discussion plus détaillée sur ce sujet, reportez-vous à GotW #88 : Un candidat pour la « construction la plus importante » par Herb Sutter.

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!