可能重复:
How come a non-const reference cannot bind to a temporary object?
这个程序:
int fun()
{
return 1;
}
int main()
{
const int& var = fun();
return 0;
}
我的问题是为什么我必须在变量定义中加上const?如果没有,g ++将给我一个错误,类似于“从'int'类型的临时类型'int&'类型的非const引用无效初始化。” 'const'是什么?
答案 0 :(得分:3)
在这种情况下,您需要const
,因为引用初始化需要一个带地址的变量,而不仅仅是一个值。因此,编译器必须创建一个匿名变量,除了通过引用之外,您无法访问该变量;编译器不希望您访问未声明的变量。
如果要明确声明变量,则不需要const
:
int tmp = fun();
int &var(tmp);