运算符优先级和求值顺序之间有什么关系?
与通俗理解相反,运算符优先级并不能完全决定求值的顺序编程中的评估。虽然优先级控制值计算的顺序,但操作数本身的求值仍然独立于优先级。
示例:
考虑表达式 x
y push(z); push(y); push(x); test_less(); // compares TOS to TOS(1), pushes result on stack test_less(); // compares TOS to TOS(1), pushes result on stack这会在 x 或 y 之前计算 z,但仍会计算 (x 评估和副作用:副作用,例如从概念上讲,递增或递减变量是由单独的线程执行的。该线程在下一个序列点加入。考虑表达式 a = b c;。它可以按如下方式执行:push(a); push(b); push(c+1); side_effects_thread.queue(inc, b); side_effects_thread.queue(inc, c); add(); assign(); join(side_effects_thread);这里,a 在 b 或 c 之前计算,即使它是赋值的目标。尝试在下一个序列点之前的表达式的任何其他部分中使用变量会导致未定义的行为。
以上是编程中运算符优先级与求值顺序有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!