举个例子:
void func(int& a)
{
a++;
}
int main()
{
double b = 1.2;
func(b);
return 0;
}
上述代码,在gcc下编译报错:
error: cannot bind non-const lvalue reference of type ‘int&’ to an rvalue of type ‘int’
这是因为,b是double类型,而func的形参是int类型,因此当b作为实参传给func时,会导致生成一个临时的int变量,
假设为c,此时c为右值,将c绑定到非常量引用a是不被允许的,因为这改变了右值不可被修改的语义,容易产生莫名的bug。
而常量左值引用可以绑定到右值,因为这从语义上保证了不会改变右值。