Le code suivant fonctionne correctement, mais pourquoi ce code est-il correct? Pourquoi le pointeur "c_str ()" du temporaire retourné par foo () est-il valide? Je pensais que ce temporaire est déjà détruit lorsque bar () est entré - mais il ne semble pas être comme ça. Donc, maintenant je suppose que le temporaire retourné par foo () sera détruit après l'appel à bar () - est-ce correct? Et pourquoi?
std::string foo() {
std::string out = something...;
return out;
}
void bar( const char* ccp ) {
// do something with the string..
}
bar( foo().c_str() );