(a++) += a为啥不对?而(++a) += a却正确?

1个回答

  • 因为C/C++要求+=语句的左面是一个“左值”(l-value).而++a的结果是左值,但a++不是.不用说(a++) += a这样诡秘的语句不行,就是(a++)=0也是错的.

    至于为什么++a的结果是左值但a++不是,简单的回答是:C/C++语言本身规定如此.如果再追问为什么这样规定,可以解释如下:

    对一个合法的赋值语句(例如a=0),编译程序总是先求出等号右边的值,然后再求出左值的地址并立即把计算出的值赋给该地址.

    但对于(a++)=0,如果a++可以作为左值,则编译程序求出左值的地址后就不能立即对其进行赋值操作,而是要插入一个加一操作.这就破坏了编译程序在编译不同赋值语句的一致性.