2

谈到 C 中运算符的关联性,我想知道为什么具有相同优先级的运算符之间存在不同的关联性。例如,后缀自增和后缀自减有左结合性;而前缀递增和前缀递减具有正确的关联性。对所有相同的优先级运算符仅具有左或右关联性不是很简单吗?

这背后有什么原因吗?

4

2 回答 2

7

对所有相同的优先级运算符仅具有左或右关联性不是很简单吗?

是的,在 C 中就是这种情况可能您认为前缀和后缀具有相同的优先级,这是错误的。后缀的优先级高于前缀!

还有另一个奇怪的案例要考虑为什么某些运算符具有一定的关联性。来自维基

例如,在 C 中,赋值 a = b 是一个返回值(即 b 转换为 a 的类型)的表达式,其副作用是将 a 设置为该值。可以在表达式的中间执行赋值。(一个表达式可以通过在它后面加上一个分号来构成一个语句;即a = b 是一个表达式,但a = b; 是一个语句)。= 运算符的右结合性允许将 a = b = c 等表达式解释为 a = (b = c),从而将 a 和 b 都设置为 c 的值。替代 (a = b) = c 没有意义,因为 a = b 不是左值。

于 2012-04-10T11:22:53.797 回答
0

二元运算符都是左结合的,除了赋值运算符是右结合的。

后缀运算符有时(例如在 K&R 2nd 中)被认为是右结合的,但这是为了表达它们比一元运算符具有更高优先级的想法。

于 2012-04-10T11:44:49.120 回答