Diamo un'occhiata a questa due funzioni:L'oggetto temporaneo sarà cancellato se non vi è alcun riferimento const ad esso?
std::string get_string()
{
std::string ret_value;
// Calculate ret_value ...
return ret_value;
}
void process_c_string(const char* s)
{
std::cout << s << endl;
}
e qui ci sono due possibili chiamate di process_c_string
con l'argomento restituito da get_string
.
Senza riferimento al riferimento restituito all'oggetto restituito di
get_string
.process_c_string(get_string().c_str());
Con riferimento vincolante const all'oggetto restituito di
get_string
.const std::string& tmp_str = get_string(); process_c_string(tmp_str.c_str());
So che secondo modo è valida, ma per quanto riguarda il primo, cosa normale dire su questo caso? L'oggetto temporaneo restituito da get_string
deve essere cancellato prima che lo process_c_str
termini perché non vi è alcun const reference
?
Nota: Entrambe le versioni sono corrette in MSVC.