非const左值引用

时间:2013-09-02 03:08:06

标签: c++

你为什么要这样做

int a;
const double &m = a;

但是当你这样做时

int a;
double &m = a;

你收到错误了吗?

error: non-const lvalue reference to type 'double' cannot bind to a value of unrelated type 'int'

编辑:

更具体地说,我试图理解非const引用不能绑定临时对象的原因。

2 个答案:

答案 0 :(得分:28)

这是因为临时无法绑定到非const引用。

double &m = a;

a属于int,正在转换为double。所以创建了一个临时的。用户定义类型的情况也是如此。

Foo &obj = Foo(); // You will see the same error message.

但是在Visual Studio中,由于默认情况下启用了编译器扩展,因此工作正常。但海湾合作委员会会抱怨。

答案 1 :(得分:10)

因为对临时修改是没有意义的,所以c ++不希望你将非const引用绑定到临时。 例如。

int a;
double &m = a;  // caution:this does not work.

如果有效怎么办? a的类型为int,并且正在转换为double。所以创建了一个临时文件。

你可以修改m,它绑定到一个临时的,但几乎没有任何反应。修改后,变量a不会改变(更糟糕的是,你可能认为a已经改变了,这可能会导致问题。)