2016-04-30 331 views
-1

當一個表達式具有兩個具有相同優先級的運算符時,該表達式將根據其關聯性進行評估。我想知道如何了以下工作:運算符優先級和關聯

i=b + b + ++b 

i這裏是4 所以++b沒有改變第2個b值,但它執行的第一個,因爲執行是由左到右。

這裏,但是:

int b=1; 
i= b+ ++b + ++b ; 

i是6

根據關聯性,我們應該執行第三b所以它應該是: 1+ (++1) + (++1 should be done first)。所以它變成: 1 + ++ 1 + 2 = 5 但是,這是不對的,所以這是如何工作的?

+1

關聯性與執行順序無關。順序保持從左到右。 – Savior

回答

1

你很困惑優先執行次序

實施例:

a[b] += b += c * d + e * f * g 

優先規則指出*自帶+自帶+=之前之前。關聯性規則(屬於優先規則的一部分)聲明*是左關聯關係,而+=是右關聯關係。

優先/結合規則基本上限定隱括號中的應用,變換上述表達式爲:

a[b] += (b += ((c * d) + ((e * f) * g))) 

然而,這種表達是仍然評價左到右。

這意味着a[b]表達式中b的索引值將使用b += ...執行前的值b

對於更復雜的示例,混合+++=操作員,請參閱問題Incrementor logic和詳細的answer of how it works

1

這是正確的,第一個b是1,第二個b在加法之前會增加1,所以它是2,第三個b已經是2,增加1使得它爲3,所以總共是6。如你所說,表達式從左到右進行評估,因此第三個b在增量之前已經是2。

+0

這不是問題,爲什麼第二個b在第三個b之前執行? preincrement是正確assoicative –

+0

@ user1865719無論它是如何關聯的,其他b將在它自己的增量之前是2 .. –

+0

@ user1865719您令* *優先順序*執行順序*令人困惑。 – Andreas