为什么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'是什么?

+1

阅读这篇文章:http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for -the-最重要的const的/。 – mfontanini 2012-08-10 02:04:44

+0

好吧,你已经抑制了错误信息,但你的代码打算做什么?在你赋值的代码中赋值后,你不能访问'var',因为它是对临时对象的引用。 – 2012-08-10 02:05:07

+0

最简单的答案:否则你可能会改变你的函数输出,这当然是随机的。 如果您有可以更改的内容,则可以将其设置为非常量引用。 这是一个简单直观的(和正确的)规则如何使用“const”。 – klm123 2012-08-10 02:11:23

在这种情况下,您需要const,因为参考初始化需要带有地址的变量,而不仅仅是一个值。因此,编译器必须创建一个匿名变量,除了通过引用之外,它们不能访问;编译器不希望你访问你没有声明的变量。

如果你想明确地声明变量,const是不必要的:

int tmp = fun(); 
int &var(tmp);