使用数字初始化常量引用

77

以下这行代码的含义是什么? 为什么0作为r-value而不是变量名也可以被接受? 这个声明语句中const关键词的意义是什么?

const int &x = 0;
1个回答

72

非常量引用不能指向字面值。你不能将字面值绑定到非常量引用上(因为修改字面值的值没有意义),只有左值可以绑定到非常量引用上。但是,你可以将字面值绑定到const引用上。

“const”很重要。在这种情况下,会为此目的创建一个临时变量,通常会创建在堆栈上。


3
你确定“临时变量”是在堆栈上创建的吗?我本以为 x 指向数据段中的某个区域,就像字符串常量一样工作。如果 x 指向堆栈,引用可能会过早失效。例如,如果你将引用作为指向某些静态变量的指针传递,并离开该方法。此外,如果每次调用方法都会创建一个新的“临时变量”,那么我认为我们不需要使用 const。我认为 const 是必要的,因为内存区域在函数调用之间被重用。 - JojOatXGME

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接