来自运营商:
表达式中的操作数从左到右计算。例如,在 中F(i) + G(i++) * H(i)
,F
使用 的旧值调用i
方法,然后使用 的旧值G
调用方法i
,最后H
使用 的新值调用方法i
。这与运算符优先级分开且无关。
将此应用于您的表达式++x - x++
,我们可以看到首先++x
评估,然后x++
评估,然后评估减法。
考虑运算符优先级的一个好方法是,具有较高优先级的运算符比具有较低优先级的运算符绑定得更紧密。它用于确定应将字符序列解析为哪些表达式,而不是评估事物的顺序。
比如在表达式++ x - x ++
中,操作符++x
比操作符绑定得更紧-
,而操作符比操作x++
符绑定得更紧-
,所以 this 被解析为(++x) - (x++)
。如果-
运算符的优先级高于++x
orx++
运算符,则该表达式将被解析为++(x - x)++
(这没有多大意义)。
++x
具有更高优先级的事实x++
在这里无关紧要。表达式确实很重要,它++x++
被解析为(++x)++
而不是++(x++)
(并引发编译器错误,因为运算符x++
不能应用于表达式(++x)
)。
一旦您使用运算符优先级规则确定++ x - x ++
应该将其解析为(++x) - (x++)
,则应用上面引用的规则,并且-
表达式的操作数从左到右进行计算。