Maison >développement back-end >C++ >Combien de temps durent les temporaires C et pourquoi ce code fonctionne-t-il ?

Combien de temps durent les temporaires C et pourquoi ce code fonctionne-t-il ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 04:42:11272parcourir

How Long Do C   Temporaries Live and Why Does This Code Work?

Durée de vie des temporaires

En C , les temporaires sont créés pour diverses raisons, telles que le retour de valeurs de fonctions ou l'évaluation d'expressions. Comprendre la durée de vie des temporaires est crucial pour le comportement correct du programme.

Considérez l'extrait de code suivant :

std::string foo() {
  std::string out = something...;
  return out;
}

void bar(const char* ccp) {
  // do something with the string..
}

bar(foo().c_str());

Dans ce code, la chaîne temporaire créée par foo() est référencée par un const char* pointeur dans l’appel à bar(). La question se pose : pourquoi ce code est-il valable ?

La réponse réside dans la durée de vie de l'intérimaire. Selon le standard C, un objet temporaire est détruit lorsque l'expression complète qui contient lexicalement la valeur r qui a créé l'objet est complètement évaluée.

Dans le code ci-dessus, l'expression complète est bar(foo().c_str ()). L'évaluation de cette expression commence à '(la parenthèse ouverte) et se termine au dernier ')' (la parenthèse fermante). Dans cette expression, la chaîne temporaire est créée en évaluant foo() et la méthode c_str() est appelée sur la chaîne temporaire.

Par conséquent, la chaîne temporaire apparaît au début de l'expression complète et est détruit lorsque l'expression est entièrement évaluée, c'est-à-dire après l'appel à bar(). Ceci explique pourquoi le pointeur const char* dans bar() fait toujours référence à une chaîne valide.

En résumé, le temporaire renvoyé par foo() n'est détruit qu'une fois que l'expression complète le contenant a été évaluée, garantissant que le pointeur renvoyé par foo().c_str() reste valide tout au long de l'appel à bar().

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!

Déclaration:
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