问题:
void increment(double& x)
{
x+=1.0;
}
int n=5;
increment(n);
上述代码错误**“非常量引用的初始值必须是左值”**
因为 int 和double 类型不一致,首先会执行隐式类型转换,产生一个临时变量。
const double tmp=(double)n
这样传给函数的就是一个常量。用一个常量(右值)对非常量类型引用赋值,会出错。
修改1:
void increment(double& x)
{
x+=1.0;
}
double n=5;//改为double型
increment(n);
修改2:
void increment(double const & x)
{
//x不能修改
}
int n=5;
increment(n);
事实上编译器拒绝对非常量引用执行隐式转换(因为隐式转换的中间临时变量是一个常量,编译时无法通过)
注:引用初始化后,不可以修改。指的不是不能修改它引用的变量的值,而是不能让它在引用其他变量。
int a=0;
int b=1;
int &c=a;
&c=b;//错误