今天看到一个问题,说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的引用当然可以作为左值,被赋值了。