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