首页 > 学院 > 开发设计 > 正文

非常量引用的初始值必须是左值

2019-11-08 01:49:38
字体:
来源:转载
供稿:网友

问题

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;//错误
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表