const引用临时变量和

时间:2017-02-26 11:33:56

标签: c++ reference const lifetime temporary

我已阅读很多关于const引用的帖子,但我们找不到我想要的内容。 你能否纠正我关于将临时变量绑定到const引用的机制的假设,以便延长生命周期?

int Foo(){return 3;}

int main(){
const int& ref = Foo();
return 0;
}

Foo返回一个临时的未命名值,该值位于寄存器中,之后通常会被解除。将它绑定到const引用会告诉编译器不要忽略它,而是将值保存在内存中,范围为ref,别名为ref

这是如何运作的?

2 个答案:

答案 0 :(得分:1)

  

Foo返回临时未命名值

正确。

  

位于寄存器

未按标准规定。

  

并且通常在之后被解雇

在完整表达结束时被摧毁,更准确。如果生命周期没有被引用延长。

当然,整数没有析构函数,因此生命周期只表示存储(如果有)是否可以重复使用。

  

将它绑定到const引用会告诉编译器不要忽略它,而是将值保存在内存中,其范围为ref

正确。将引用绑定到临时文件会延长该临时文件的生命周期,以匹配引用的生命周期。

答案 1 :(得分:0)

语言并没有真正说明如何实现它,它应该如何工作,但你展示了一种可行的方法。

理论上,没有什么能阻止编译器将临时文件保存在寄存器中并使用ref作为名称。因此,它不必将值存储在内存中。

或者,在这种特殊情况下,编译器可以看到该值始终为3,因此它可以用ref替换3的所有用途,而不是在任何地方存储任何内容