操作员关联性何时重要?

时间:2013-11-17 10:57:16

标签: c syntax programming-languages operators associativity

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

但是,对于像&&这样的关联运算符,似乎并不重要,但大多数语言都将此列为左关联。

(a && b) && ca && (b && c)之间是否存在实际差异?

2 个答案:

答案 0 :(得分:8)

我无法相信有太多错误(删除)的答案......也许我应该回答这个问题。

首先,precedence != associativity != evaluation order

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

对于&&||的特定情况,只要它们没有重载就无关紧要(这只能在C ++中使用,而不是C ),但语言仍然定义一个只是为了一致性 - 因此代码的“树”表示(基于语法)是唯一的。这也有利于C ++,因为现在重载&&||的含义并不明确。

答案 1 :(得分:2)

添加到@ Mehrdads @ answer(我赞成):

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

a && b && c

只是一个语法错误。假设上面不应该是语法错误,你必须决定它是否应该意味着:

(a && b) && c

a && (b && c)

你不能只说:我不在乎。