2 shifu900518123 shifu900518123 于 2013.11.17 21:15 提问

PHP的一个坑-----自增运算符
php

$a=1;
echo $a+$a++; //3

$a = 1;
echo $a + $a + $a++; //3

输出都是3,为什么不先算$a++,玩了之后再和前面的$a相加,这样的话不是就是5了么

1个回答

todd_leftcode
todd_leftcode   2013.11.17 22:50
已采纳

因为$a++是后置自增运算,是先求值再自增的。 ++$a是先自增再求值的。 这个在c/c++/java/c#。。。中都是一个套路。

[UPDATE]
以上说法极不严谨基本是错误的。

虽然$a++为后置自增运算,即先求值再加1, 但依然不能阻止编译器先+1再求值,只要其+1的结果不影响求值结果。
比如:$b = $a++; 可以拆解成 $c = $a; $a++; $b = $c; 当然这只是可能
对于 $a + $a++; 按上边的路子会变成 $c = $a; $a++; return $a + $c; 结果可想而知了。
但这些都是基于猜测,一切由编译器根据实际情况且不违背语言规范地决定。

具体原理请google "顺序点"

todd_leftcode
todd_leftcode 好吧, 我错了。 经典的顺序点问题,我没看仔细就瞎说了(还被加1了,害人,惭愧)。
接近 4 年之前 回复
shifu900518123
shifu900518123 按你这么说,第一个应该输出一个2了,先求值再计算了
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片