大多数编程语言都有一个二元运算符的优先级和关联性表。在某些情况下,关联性很重要,例如(a - b) - c
!= a - (b - c)
。
然而,对于像这样的关联运算符来说&&
,这似乎无关紧要,但大多数语言都将其列为左关联。
(a && b) && c
是否存在和之间实际上存在差异的情况a && (b && c)
?
大多数编程语言都有一个二元运算符的优先级和关联性表。在某些情况下,关联性很重要,例如(a - b) - c
!= a - (b - c)
。
然而,对于像这样的关联运算符来说&&
,这似乎无关紧要,但大多数语言都将其列为左关联。
(a && b) && c
是否存在和之间实际上存在差异的情况a && (b && c)
?
我不敢相信有这么多错误(已删除)的答案......也许我应该回答这个问题。
首先,优先级!=关联性!=评估顺序。
现在我们已经解决了这个问题:在某些情况下,关联性很重要。
对于a + b + c
,当a
、b
和c
是浮点数而不是整数时很重要,因为舍入误差会根据项的分组方式而不同地累积。
对于 and 的特殊情况,&&
只要||
它们没有重载(这仅在 C++ 中可能,而不是 C 中可能)就没有关系,但是该语言仍然定义一个只是为了保持一致性 - 并且“树”代码的表示(基于语法)是唯一的。这也对 C++ 有利,因为现在重载的含义&&
并不||
模糊。
添加到@Mehrdads@ 答案(我赞成):
如果您曾经构建过解析器,您会注意到您的运算符必须具有关联性,否则
a && b && c
将只是一个语法错误。假设以上不应该是语法错误,您必须确定它是否应该意味着:
(a && b) && c
或者
a && (b && c)
你不能只说:我不在乎。