可能重复:
常量引用类成员是否会延长临时变量的寿命?
假设我有一个函数
f
:
int f(int x){return x;}
const int &a=f(1);
我知道
f(1)
只是暂时的,在这句话之后我将被摧毁,但是
f(1)
将存储在哪里?x
在超出范围时也没有被销毁?f(1)
和 x
有什么区别?您将表达式与值混淆了。
1) 表达式
f(1)
返回的临时值的生命周期将延长。此规则对于 const
参考文献来说是唯一的。
2)编译器想要的任何地方,但可能在堆栈上。
3)也许吧。这取决于编译器是复制
x
还是执行复制省略。由于类型是int
,所以没关系。
4)有很多差异。一个是
int f(int)
内部的局部变量的名称。它是一个左值。另一个是调用 int f(int)
并求值为右值的表达式。
将临时对象绑定到
const&
可将临时对象的生命周期延长到引用的生命周期。