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