当我在C ++中为const引用分配临时int时会发生什么?

时间:2012-03-06 14:25:16

标签: c++ function return

  

可能重复:
  Does a const reference prolong the life of a temporary?

假设我有一个函数f

int f(int x){return x;}

const int &a=f(1);

我知道f(1)只是一个临时的,我将在此声明后销毁,但

  1. 确实使引用const会给f(1)一个长寿命吗?
  2. 如果是,那么f(1)将被存储在哪里?
  3. 这是否意味着x在超出范围时也没有被销毁?
  4. f(1)x之间的区别是什么?

2 个答案:

答案 0 :(得分:8)

你将表达式与值混淆。

1)表达式f(1)返回的临时值的生命周期将延长其生命周期。此规则对const引用而言是唯一的。

2)编译器需要的任何地方,但可能在堆栈上。

3)也许吧。这取决于编译器是复制x还是执行了复制省略。由于类型为int,因此无关紧要。

4)很多不同之处。一个是int f(int)内的局部变量的名称。这是一个左值。另一个是调用int f(int)并计算为右值的表达式。

答案 1 :(得分:3)

将临时值绑定到const&会将临时值的生命周期延长到引用的生命周期。