为什么const有意义?
问题描述:
可能重复:
How come a non-const reference cannot bind to a temporary object?为什么const有意义?
这个程序:
int fun()
{
return 1;
}
int main()
{
const int& var = fun();
return 0;
}
我的问题是,为什么我必须把一个const以前生产的VAR定义是什么?如果不是的话,g ++会给我一个错误,就像“int'类型为'int'的非const引用的无效初始化'。 'const'是什么?
答
在这种情况下,您需要const
,因为参考初始化需要带有地址的变量,而不仅仅是一个值。因此,编译器必须创建一个匿名变量,除了通过引用之外,它们不能访问;编译器不希望你访问你没有声明的变量。
如果你想明确地声明变量,const
是不必要的:
int tmp = fun();
int &var(tmp);
阅读这篇文章:http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for -the-最重要的const的/。 – mfontanini 2012-08-10 02:04:44
好吧,你已经抑制了错误信息,但你的代码打算做什么?在你赋值的代码中赋值后,你不能访问'var',因为它是对临时对象的引用。 – 2012-08-10 02:05:07
最简单的答案:否则你可能会改变你的函数输出,这当然是随机的。 如果您有可以更改的内容,则可以将其设置为非常量引用。 这是一个简单直观的(和正确的)规则如何使用“const”。 – klm123 2012-08-10 02:11:23