Давайте посмотрим на эти две функции:
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
на него?
Примечание: Оба версии в порядке в MSVC.