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

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/18 16:24:48
(a++) += a为啥不对?而(++a) += a却正确?
xSn@,5 |+uEUӆ4 <6؆/ܙa/Z*%9sνhCҹ~p"Hik0w뷱o/WR6FѧSMlt%4zwv9O '<<{<{@zF4XAtEA( @"Ū3wxUWĉNI1 a]!PI4,n^ZZj[ū͢LC? i9j4Bu}uEn+`W*5XEl@c+fqW"6#40 rcH,OORFi 7gMBAxHm%JQM]TabPRlXŭ+xPґ ?Zچ#9OK!3V,qyЫ\< d D! x{M Q.z/jA 07w)<)7K

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

(a++) += a为啥不对?而(++a) += a却正确?
因为C/C++要求+=语句的左面是一个“左值”(l-value).而++a的结果是左值,但a++不是.不用说(a++) += a这样诡秘的语句不行,就是(a++)=0也是错的.
至于为什么++a的结果是左值但a++不是,简单的回答是:C/C++语言本身规定如此.如果再追问为什么这样规定,可以解释如下:
对一个合法的赋值语句(例如a=0),编译程序总是先求出等号右边的值,然后再求出左值的地址并立即把计算出的值赋给该地址.
但对于(a++)=0,如果a++可以作为左值,则编译程序求出左值的地址后就不能立即对其进行赋值操作,而是要插入一个加一操作.这就破坏了编译程序在编译不同赋值语句的一致性.