a+++++b表示什么含义

  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,也会出现 “++”需要左值的错误,自己想想看吧。

 

posted @ 2012-03-11 22:21  arrow'  阅读(2655)  评论(0编辑  收藏  举报