大多数编程语言都有二元运算符的优先级和关联性表。在某些情况下,相关性很重要,例如(a - b) - c
!= a - (b - c)
。
但是,对于像&&
这样的关联运算符,似乎并不重要,但大多数语言都将此列为左关联。
在(a && b) && c
和a && (b && c)
之间是否存在实际差异?
答案 0 :(得分:8)
我无法相信有太多错误(删除)的答案......也许我应该回答这个问题。
首先,precedence != associativity != evaluation order。
现在我们已经解决了这个问题:在某些情况下,关联性很重要
对于a + b + c
,当a
,b
和c
是浮点数而不是整数时,这很重要,因为舍入错误会根据术语的分组方式而有所不同。
对于&&
和||
的特定情况,只要它们没有重载就无关紧要(这只能在C ++中使用,而不是C ),但语言仍然定义一个只是为了一致性 - 因此代码的“树”表示(基于语法)是唯一的。这也有利于C ++,因为现在重载&&
和||
的含义并不明确。
答案 1 :(得分:2)
添加到@ Mehrdads @ answer(我赞成):
如果您构建过解析器,您会注意到您的操作符必须具有关联性,否则
a && b && c
只是一个语法错误。假设上面不应该是语法错误,你必须决定它是否应该意味着:
(a && b) && c
或
a && (b && c)
你不能只说:我不在乎。