Будет ли удален временный объект, если на него нет константной ссылки?

Давайте посмотрим на эти две функции:

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 .

  1. Без привязки константная ссылка на возвращенный объект get_string .

     process_c_string (get_string (). C_str ());
    
  2. С привязкой константной ссылки на возвращенный объект get_string .

     const std :: string & tmp_str = get_string ();
    process_c_string (tmp_str.c_str ());
    

Я знаю, что второй способ действителен, но как насчет первого, что стандарт говорит об этом случае? Будет ли временный объект, возвращенный get_string , быть удален до завершения process_c_str из-за отсутствия ссылки const на него?

Примечание: Оба версии в порядке в MSVC.

5
задан Mihran Hovsepyan 26 January 2012 в 13:38
поделиться