permite echar un vistazo a estas dos funciones:¿Se eliminará el objeto temporal si no hay referencia de referencia a él?
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;
}
Y aquí hay dos posibles llamadas de process_c_string
con el argumento devuelto por get_string
.
Sin unión referencia const para el objeto devuelto de
get_string
.process_c_string(get_string().c_str());
con la unión de referencia const para el objeto devuelto de
get_string
.const std::string& tmp_str = get_string(); process_c_string(tmp_str.c_str());
sé que la segunda forma es válida, pero ¿qué pasa con la primera, ¿qué norma decir sobre este caso? ¿Se eliminará el objeto temporal devuelto por get_string
antes de que process_c_str
haya terminado porque no hay const reference
?
Nota: Ambas versiones son correctas en MSVC.