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

Pourquoi la liaison d'un objet temporaire à une référence constante prolonge-t-elle sa durée de vie en C ?

DDD
Libérer: 2024-11-02 17:03:02
original
626 Les gens l'ont consulté

Why Does Binding a Temporary Object to a Constant Reference Extend its Lifetime in C  ?

Renvoi d'objets temporaires et liaison à des références constantes

En C, attribuer un objet temporaire à une référence constante est une opération courante qui peut initialement soulever des questions sur la durée de vie de le temporaire.

Question :

Pourquoi le code suivant est-il valide et n'entraîne pas d'erreur de compilation ?

<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 :

C définit explicitement que la liaison d'un objet temporaire à une référence constante basée sur une pile prolonge la durée de vie du temporaire pour correspondre à celle de la référence. Dans ce scénario, le temporaire renvoyé par foo() dure jusqu'à la fin de la fonction main().

Explication :

  • Les objets temporaires ont généralement un courte durée de vie, se terminant à la fin de l'expression dans laquelle ils apparaissent.
  • Cependant, C autorise une exception pour les références const sur la pile.
  • En liant un temporaire à une référence const sur la pile. , la durée de vie du temporaire est prolongée pour correspondre à la durée de vie de la référence.
  • Cela évite les erreurs de référence pendantes causées par des références pointant vers des objets qui ont été détruits.

Remarque :

  • Cette exception s'applique uniquement aux références const basées sur la pile.
  • Elle ne s'applique pas aux références qui sont membres d'objets.
  • Pour pour plus de détails, reportez-vous à "GotW #88: A Candidate For the "Most Important const" de 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
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!