[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,右值可以是左值,也可以是非左值

你可能感兴趣的:([C++] l-value和r-value问题)