我已阅读很多关于const引用的帖子,但我们找不到我想要的内容。 你能否纠正我关于将临时变量绑定到const引用的机制的假设,以便延长生命周期?
int Foo(){return 3;}
int main(){
const int& ref = Foo();
return 0;
}
Foo
返回一个临时的未命名值,该值位于寄存器中,之后通常会被解除。将它绑定到const引用会告诉编译器不要忽略它,而是将值保存在内存中,范围为ref
,别名为ref
。
这是如何运作的?
答案 0 :(得分:1)
Foo返回临时未命名值
正确。
位于寄存器
未按标准规定。
并且通常在之后被解雇
在完整表达结束时被摧毁,更准确。如果生命周期没有被引用延长。
当然,整数没有析构函数,因此生命周期只表示存储(如果有)是否可以重复使用。
将它绑定到const引用会告诉编译器不要忽略它,而是将值保存在内存中,其范围为ref
正确。将引用绑定到临时文件会延长该临时文件的生命周期,以匹配引用的生命周期。
答案 1 :(得分:0)
语言并没有真正说明如何实现它,它应该如何工作,但你展示了一种可行的方法。
理论上,没有什么能阻止编译器将临时文件保存在寄存器中并使用ref
作为名称。因此,它不必将值存储在内存中。
或者,在这种特殊情况下,编译器可以看到该值始终为3
,因此它可以用ref
替换3
的所有用途,而不是在任何地方存储任何内容