Давайте посмотрим на эти две функции:
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;
}
А вот два возможных вызова process_c_string
с аргументом, возвращаемым get_string
.
Без привязки постоянной ссылки к возвращаемому объекту
get_string
.process_c_string(get_string().c_str());
С привязкой константной ссылки к возвращаемому объекту
get_string
.const std::string& tmp_str = get_string(); process_c_string(tmp_str.c_str());
Я знаю, что второй способ действителен, но как насчет первого, что стандарт говорит об этом случае? Будет ли временный объект, возвращенный get_string
, удален до завершения process_c_str
из-за того, что в нем нет const reference
?
Примечание. Обе версии подходят для MSVC.