该标准的第 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
. fooRef
在线销毁#0
。我认为应该在这里销毁临时文件,因为生命周期扩展不是传递的。
问题:
是什么
until the function exits
意思?这是什么意思untill it finished executing
?为什么我得到一个
5
输出。临时对象是否仍然存在在线#2
?我如何解释标准报价以了解此示例的工作原理?
非常感谢参考标准的逐步原子演练。谢谢!
PS这里接受的答案还告诉代码是broken
我不明白,为什么我会得到这样的程序输出。