2012-10-24 93 views

回答

2

它只能被评价为:

a += (b += c) 

如果将它作为这个评估:

(a += b) += c 

然后将评估a += b为一个数值,然后尝试更改数字价值,而不是一个变量,这是不可能的。

+0

Ahem。这是必要的条件,但它不是唯一的条件;例如,如果'+ ='返回一个左值(并且通常是这样;'(a + = b)+ = c'是在C++中的正确​​语法([proof](http://codepad.org/588YbDde))) ,它的关联性是重要的。 – raina77ow

6

这取决于+=运营商的关联性。通常它是正确的,所以这是第二个答案:a+=bb+=c之后被评估。

+0

如果关联性不正确,那么这会如何工作?如果表达式'a + = b'返回例如'5','5 + = c'是什么意思? – Guffa

+0

@Guffa好的;只有在捷径分配的结果是左值本身时,LTR才有可能。所以这不仅是关联性的问题。 ) – raina77ow

0

在大多数高级语言中,像这样的表达式从左到右进行求值,因为+=是从右到左的关联。在这种情况下,c的值被添加到b的值,则值b(在添加c后)被添加到a

这相当于你的第二块。