运算符优先级和结合性:定义以及与计算顺序的关系
简介
编程中语言、运算符优先级和结合性决定了运算符的求值顺序。虽然许多编程教科书提供了列出这些属性的表格,但关于它们的解释及其定义的来源却出现了问题。
问题
答案
运算符优先级和关联性定义
运算符优先级和结合性是在语言标准本身中定义的。标准语法指定了构造表达式的规则。通过检查这些规则,可以推导出运算符的优先级和结合性。
例如,在 C 中,加法表达式(加法和减法)的语法如下:
additive-expression: multiplicative-expression additive-expression + multiplicative-expression additive-expression - multiplicative-expression
从这条规则,我们可以推断出乘法表达式(乘法和除法)比加法表达式具有更高的优先级,因为它们是加法表达式的子规则。此外,可以从规则中推断出 and - 运算符的从左到右的关联性,该规则规定一个加法表达式可以递归地由其他加法表达式组成。
求值顺序
区分运算符优先级和结合性以及求值顺序至关重要。虽然优先级和结合性决定了运算符的分组方式,但计算顺序是指计算各个表达式的顺序。在 C 中,不能保证严格按照优先级和结合性进行求值。
例如,在表达式 f1() f2() * f3() 中, * 运算符的优先级高于运算符,因此在分组 f1() (f2() * f3()) 中。但是,计算顺序未定义,这意味着可以首先计算 f3()、f1() 或 f2()。
某些运算符,例如逻辑 OR (||) 运算符,可以执行对它们的操作数求值施加一个序列,允许短路。在x||中y, x 总是在 y 之前评估,以确定是否需要评估 y。
以上是关于编程语言中的表达式求值,运算符优先级和结合性表实际上告诉我们什么?的详细内容。更多信息请关注PHP中文网其他相关文章!