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()` ?
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!