问题:
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;//错误新闻热点
疑难解答