2

可能重复:
前缀/后缀增量

关于运算符优先级的官方 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 .

4

1 回答 1

1

更新。这并没有给出完整的答案。我无法清楚地说明你如何获得 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 
于 2012-10-25T19:00:30.843 回答