可能重复:
Does a const reference prolong the life of a temporary?
假设我有一个函数f
:
int f(int x){return x;}
const int &a=f(1);
我知道f(1)
只是一个临时的,我将在此声明后销毁,但
f(1)
将被存储在哪里?x
在超出范围时也没有被销毁?f(1)
和x
之间的区别是什么?答案 0 :(得分:8)
你将表达式与值混淆。
1)表达式f(1)
返回的临时值的生命周期将延长其生命周期。此规则对const
引用而言是唯一的。
2)编译器需要的任何地方,但可能在堆栈上。
3)也许吧。这取决于编译器是复制x
还是执行了复制省略。由于类型为int
,因此无关紧要。
4)很多不同之处。一个是int f(int)
内的局部变量的名称。这是一个左值。另一个是调用int f(int)
并计算为右值的表达式。
答案 1 :(得分:3)
将临时值绑定到const&
会将临时值的生命周期延长到引用的生命周期。