为什么你可以这样做
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'
编辑:
更具体地说,我试图了解非常量引用无法绑定临时对象的原因。
为什么你可以这样做
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'
编辑:
更具体地说,我试图了解非常量引用无法绑定临时对象的原因。
那是因为临时不能绑定到非常量引用。
double &m = a;
a
是 typeint
并且正在转换为double
. 所以创建了一个临时的。用户定义类型也是如此。
Foo &obj = Foo(); // You will see the same error message.
但是在 Visual Studio 中,由于默认启用了编译器扩展,它可以正常工作。但 GCC 会抱怨。
因为对临时对象进行修改是没有意义的,所以 C++ 不希望您将非常量引用绑定到临时对象。例如:
int a;
double &m = a; // caution:this does not work.
如果有效怎么办?
a
是 int 类型,正在转换为 double。所以创建了一个临时的。
你可以修改m
,它是绑定到一个临时的,但几乎什么都没有发生。修改后,变量a
并没有改变(更糟糕的是?你可能认为a
已经改变,这可能会导致问题)。