[C++] l-value和r-value问题

以下是个人日记,仅供参考。小白和初学者切勿混淆!

普遍认为,l-value就是左值,r-value就是右值,自学的小白很容易简单理解成,左值就是操作符左边的值,右值就是操作符右边的值。但如果非要钻钻牛角尖,事实真是这么简单吗?左值右值到底有什么需要被定义和区分的必要性呢?

更确切地,l-value应该被理解成local-value,而不仅仅是left-value。同理,r-value应该被理解成readable-value。下面根据查阅网络的资料做一点点讨论。

1,对左值更好的理解应该是:“在内存中被分配有特定位置(即物理地址)的东西。”或者是:“指向一个确定对象的东西。”许多其他编程语言只允许使用表达式(assignment)来修改某个对象(object)。但C/C++允许程序员使用操作符(operator)来修改对象。

2,右值只是一个可供读取的值,它没有实际存在物理内存地址。

注意以下几个结论:
1,在C中,一个表达式要么是左值要么是非左值。没有“右值”这个说法。直到C++,才提出这个说法。

2,左值不一定是可以修改的值。例如,如果有某个const对象是左值,那它是不能被修改的,const类型是不可修改变量(non-modifiable l-value)。

3,右值可以是左值,也可以是非左值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值