可能重复:
前缀/后缀增量
关于运算符优先级的官方 php 手册有以下奇怪的代码和注释:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
有人能解释一下为什么它说在某些情况下它可能会打印 4 或 5 吗?对我来说很明显,它首先会增加 $a(到 2 的值),然后会总结 $a 和 $a (4),然后才将 $a 的值更改为 3。所以,结果应该是 4 .
更新。这并没有给出完整的答案。我无法清楚地说明你如何获得 5。
我在下面写的内容是基于 C++ 的真实情况,它可能有助于 Precedence 不控制语句各部分的执行顺序,并且一条语句的效果不会自动(至少不能保证)更新语句中的变量。
例如:
a=1
b=a++ ; // b is 1, a is 2
c=++a ; // c is 3, a is 3
现在想想写c+b。这将评估为 1+3=4。但是当你写
a++ + ++a
语言不能保证在每次单独递增后都会更新 a 。
所以你不妨得到的效果
a=1
b=a++ ; // b is 1, a is 2
a=1 ;
c=++a ; // c is 2, a is 2
结果 3
这实际上与优先级甚至评估顺序无关。例如,如果保证在语句中更新变量,则翻转评估顺序无论如何都会得到 4。
a=1
c=++a ; // c is 2, a is 2
b=a++ ; // b is 2, a is 3