5

大多数编程语言都有一个二元运算符的优先级和关联性表。在某些情况下,关联性很重要,例如(a - b) - c!= a - (b - c)

然而,对于像这样的关联运算符来说&&,这似乎无关紧要,但大多数语言都将其列为左关联。

(a && b) && c是否存在和之间实际上存在差异的情况a && (b && c)

4

2 回答 2

9

我不敢相信有这么多错误(已删除)的答案......也许我应该回答这个问题。

首先,优先级!=关联性!=评估顺序

现在我们已经解决了这个问题:在某些情况下,关联性很重要。
对于a + b + c,当abc是浮点数而不是整数时很重要,因为舍入误差会根据项的分组方式而不同地累积。

对于 and 的特殊情况,&&只要||它们没有重载(这仅在 C++ 中可能,而不是 C 中可能)就没有关系,但是该语言仍然定义一个只是为了保持一致性 - 并且“树”代码的表示(基于语法)是唯一的。这也对 C++ 有利,因为现在重载的含义&&并不||模糊。

于 2013-11-17T11:23:27.793 回答
1

添加到@Mehrdads@ 答案(我赞成):

如果您曾经构建过解析器,您会注意到您的运算符必须具有关联性,否则

a && b && c

将只是一个语法错误。假设以上不应该是语法错误,您必须确定它是否应该意味着:

(a && b) && c

或者

a && (b && c)

你不能只说:我不在乎。

于 2013-11-17T19:16:53.453 回答