2012-10-24 126 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

這相當於你的第二塊。