C/C++引用必须为左值的问题详解

我们常常会遇到这样的问题:
const int& a = 101;//对
int& b = 101;//错

例子:
int a;
int &b = a;
a = 10;
printf(“b = %d\n”,b);
此时b = 10,b是a的引用,就是说b和a的地址相同,对a做改变b也跟着变化。
那么这是为什么呢?
下面我们来讲一个概念:左值和右值?
左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。并不是我们所理解的在=左边就是左值,在=右边就是右值。
C/C++规定:对于对象的引用必须是左值(常量引用除外)
const引用能够绑定到临时对象, 并将临时对象的生命周期由”创建临时对象的完整表达式”提升至”绑定到的const引用超出作用域”。 non-const 引用没有这个功能

回到我们刚开始的那个问题,为什么加了const以后就正确呢,不加就不行呢?
其实我们可以这样去理解:
加了const以后说明a是常量,a的值是不变的,一直都是101。此时a是左值。
如果不加const,b的值是可以变化的,b只是一个临时变量,不是左值。会出现错误:将类型为 ‘int&’ 的非 const 引用初始化为类型为 ‘int’ 的临时变量无效。就是说到分号结束后b也就没有了,不是我们想要的结果。
同时又是C语言不支持int &b = a;这种写法,但是C++支持。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值