当表达式具有两个具有相同优先级的运算符时,将根据其关联性来计算表达式。我想知道以下是如何工作的:
i=b + b + ++b
i
这里是4
因此++b
没有更改前2个b
值,但它首先执行,因为执行是从左到右。
然而,这里:
int b=1;
i= b+ ++b + ++b ;
i
是6
根据关联性,我们应该执行第3个b
所以它应该是:
1+ (++1) + ( ++1 should be done first)
。所以它变成:
1 + ++ 1 + 2 = 5
但是,这是不对的,那么这是如何工作的呢?
答案 0 :(得分:2)
您将优先级与执行顺序混淆。
示例:
a[b] += b += c * d + e * f * g
优先规则规定*
出现在+
之前+=
。关联性规则(它是优先规则的一部分)表明*
是左关联的,+=
是右关联的。
优先级/关联性规则基本上定义了隐式括号的应用,将上面的表达式转换为:
a[b] += ( b += ( (c * d) + ((e * f) * g) ) )
但是,此表达式仍然是评估从左到右。
这意味着表达式b
中a[b]
的索引值将使用b
执行之前b += ...
的值。
对于更复杂的示例,混合++
和+=
运算符,请参阅问题Incrementor logic
和详细的answer of how it works。
答案 1 :(得分:1)
它是正确的,第一个b是1,第二个b在加法之前将增加1,所以它是2,第三个b已经是2,并且增加1使它成为3所以它总共有6个。如你所说,表达式从左到右进行评估,因此第三个b在增量之前已经是2。