12.2.5 часть стандарта говорит:Временное продление времени жизни
Временная граница с опорным параметром в вызове функции (5.2.2) сохраняется до завершения полного выражения не содержащий вызов , Временная привязка к возвращаемому значению в возвращаемой функции (6.6.3) сохраняется до выхода функции. Во всех этих случаях временные, созданные во время оценки выражения , инициализирующие ссылку, за исключением временной, к которой привязана ссылка , уничтожаются в конце полного выражения в , которые они созданы, и в обратный порядок завершения строительства .
Код я пытаюсь понять:
#include <iostream>
const int& foo(const int& fooRef)
{
return fooRef;
} // #0
int main (void)
{
const int& numberRef = foo(5); // #1
std::cout << numberRef; // #2
return 0;
}
В строке #1
временный объект создан и связан с fooRef
параметром foo
. fooRef
уничтожен по строке #0
. Поэтому я думал, что временное должно быть разрушено здесь, поскольку продление жизни не является транзитивным.
Вопросы:
Что
until the function exits
значит? Означает ли этоuntill it finished executing
?Почему я получаю вывод
5
. Есть ли временный объект по-прежнему в строке#2
?Как я могу интерпретировать стандартную цитату, чтобы выяснить, как работает этот пример?
Понятно, что поэтапное проведение атомарного сквозного со ссылками на стандарт. Спасибо!
P. S. Принятый ответ here также сообщил, что код broken
, и я не понимаю, почему я получаю такой вывод программы.