Maison >développement back-end >C++ >Pourquoi le pointeur `c_str()` d'un objet chaîne temporaire est-il valide dans `bar()` après le retour de sa fonction de création `foo()` ?

Pourquoi le pointeur `c_str()` d'un objet chaîne temporaire est-il valide dans `bar()` après le retour de sa fonction de création `foo()` ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-09 07:01:07390parcourir

Why is the `c_str()` pointer of a temporary string object valid in `bar()` after its creating function `foo()` has returned?

La durée de vie des objets dans foo() et bar()

En C , les objets créés lors des appels de fonction sont considérés comme des objets temporaires. Comprendre leur durée de vie est crucial pour garantir le comportement correct du programme.

Considérez le 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() );

Question :

Pourquoi le c_str( ) pointeur de l'objet temporaire renvoyé par foo() valide dans la fonction bar() même après que foo() ait terminé ?

Réponse :

Selon le standard C, un objet temporaire est détruit une fois l'expression complète qui contient sa création terminée. Dans ce cas, l'expression complète est :

bar( foo().c_str() );

Dans l'art ASCII, la durée de vie de l'objet temporaire ressemble à ceci :

____________________   full-expression ranges from 'b' to last ')'
bar( foo().c_str() );
     ^^^^^          ^
       |            |
     birth       funeral

L'objet temporaire est créé lorsque foo() est appelé (naissance) et détruit une fois l'exécution de l'expression terminée (funérailles), garantissant que le pointeur c_str() reste valide tout au long de l'exécution de 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