现在的位置: 首页 > 综合 > 正文

由a+++++b联想到“左值”与“右值”

2018年03月21日 ⁄ 综合 ⁄ 共 480字 ⁄ 字号 评论关闭

今天看到一个问题,说a+++++b表示什么含义?

把它放到程序了试了一下。编译错误,提示:自增操作数必须是左值。然后联想到前两天写一个程序,总遇到l-value的麻烦。

上网查了下:简单的说,左值就是可以在=左边,被赋予值的东西;右值则是在=右边,可以赋给别人的东西。所以左值必须是有内存空间的东东;而右值则未必然,可以是变量,也可是常量和某种表达式,只要能提供一个确定的值即可。

知道这些就够了,这个问题没必要弄的太熟悉。


为什么a+++++b会编译错误呢?

第一,编译器在读入此语言时,遇到连续多个+,如+++++,自动识别位((++)++)+,即会++比+更优先识别(大概只能这样说)。

第二,++运算需要左值的。

a+++++b <=> ((a++)++)+b

a++没问题,但问题就在于a++却不能作为左值,即不能被赋予值,因为a++是先返回a的值进行运算,然后再对a的引用加1。然而a的值(value-a)是不能作为左值的。所示((a++)++)错误。

++a为什么可以作为左值呢?

原因在于++a是对a的引用加1,然后返回a的引用。a的引用当然可以作为左值,被赋值了。

 

抱歉!评论已关闭.