为什么C中的运算符之间存在不同的关联性?

时间:2012-04-10 11:14:33

标签: c operators associativity

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

背后有什么理由吗?

2 个答案:

答案 0 :(得分:7)

  

对所有人来说,只有左右关联性是不是很简单   相同的优先运算符?

是和it is the case in C可能您认为前缀和后缀具有相同的优先级错误。 Postfix的优先级高于前缀!

还有一个奇怪的案例要考虑 为什么某些运营商具有某种关联性 。来自Wiki

  

例如,在C中,赋值a = b是返回的表达式   具有副作用的值(即,b转换为a的类型)   将a设置为此值。可以在中间执行分配   一个表达。 (表达式可以通过表达式来表达   用分号跟着它;即a = b是表达式,但a = b;   是一个声明)。 =运算符的右关联性允许   诸如a = b = c的表达式被解释为a =(b = c),   从而将a和b都设置为c的值。替代方案(a =   b)= c没有意义,因为a = b不是左值。

答案 1 :(得分:0)

二进制运算符都是左关联的,除了赋值运算符是右关联的。

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