在编程世界中,运算符优先级和结合性在确定操作顺序方面发挥着至关重要的作用。但是谁定义了这些规则以及它们与求值顺序有何关系?
与流行的假设相反,运算符优先级和结合性并未由以下标准明确定义: ANSI C11。相反,它们是从语言的语法中隐式推断出来的。
在 C 和 C 中,语法规则规定了操作的顺序。例如,加法表达式(如 和 -)的规则表明乘法表达式(* 和 /)是加法表达式的子表达式。这建立了 * 和 / 优先于 - 的优先级。
类似地,加法表达式的左关联性规则指定 x y z 将被分组为 (x y) z。
运算符优先级和结合性并不直接决定求值的顺序。它们仅仅定义表达式的分组。例如,f1() f2() * f3() 根据优先级分组为 f1() (f2() * f3())。但是,函数 f1()、f2() 和 f3() 仍然可以按任意顺序调用。
某些运算符,例如逻辑 OR 运算符 (||) ,对操作数评估施加排序以启用短路。但是,此类运算符在语言标准中明确定义。
虽然运算符优先级和结合性是理解运算顺序的重要概念,但它们与求值顺序不同。程序员对关联性和优先级的理解有助于理解语言的规则,从而实现更精确、更高效的编码实践。
以上是运算符优先级和结合性与编程中的求值顺序有何关系?的详细内容。更多信息请关注PHP中文网其他相关文章!