a+++++b表示什么含义?
自己编译了一下,
int main()
{
int a = 0;
int b = 0;
int c = 0;
c = a+++++b;
printf (" a+++++b The result is %d",c);
return 0;
}
error C2105: “++”需要左值。
网上查了一下,左值就是可以在"="左边,能被赋予值的东西;右值则是在"="右边,可以赋值给别人的东西。所以左值必须是有内存空间的东西;而右值则既可以是变量,也可是常量和某种表达式,只要能提供一个值即可。
为什么a+++++b会编译错误呢?
第一,编译器在读入此语言时,遇到连续多个+,如+++++,自动识别位((++)++)+,即会++比+更优先识别(大概只能这样说)。
第二,++运算需要左值的。
a+++++b <=> ((a++)++)+b
a++没问题,但问题就在于a++却不能作为左值,即不能被赋予值,因为a++是先返回a的值进行运算,然后再对a的引用加1。然而a的值(value-a)是不能作为左值的。所示((a++)++)错误。
++a为什么可以作为左值呢?
原因在于++a是对a的引用加1,然后返回a的引用。a的引用当然可以作为左值,被赋值了。
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
//c = a+++++b;
//printf (" a+++++b The result is %d",c);
c = a+++(++b);
printf (" a+++(++b) The result is %d\n",c);
d = ++a+(++b);
printf (" ++a+++b The result is %d\n",d);
return 0;
}
a+++(++b) The result is 1
++a+++b The result is 4
如果你计算++a+++b,也会出现 “++”需要左值的错误,自己想想看吧。