4

請注意,這有沒有關係Operator Precedence..() and ++Undefined behavior and sequence pointsWhy are these constructs (using ++) undefined behavior?和幾百篇關於這個類似的問題在這裏運算符優先級和結合在C/C++


不久:是相關性由標準保證?

詳細示例:從Wikipedia的文章對操作者的優先級,和operator*operator/具有相同的優先級,他們是Left-to-right運算符。這是否意味着,這標準保證,這:

int res = x/y * z/t; 

int res = ((x/y) * z)/t; 

或評估它的實現定義的?

如果有保證,你可以引用?


這只是出於好奇,我總是寫在這些情況下,括號內。
準備刪除問題,如果有這樣的問題。

+1

是(!現在需要一些用於字符) – 2012-08-17 12:19:56

回答

6

從最新的公開可用的draft

5.6乘法運算符[expr.mul]

1乘法運算符*,/,和%組左到右。

multiplicative-expression: 
pm-expression 
multiplicative-expression * pm-expression 
multiplicative-expression/pm-expression 
multiplicative-expression % pm-expression 

那麼解析就會像:

int res = x/y * z/t; 
int res = (x/y * z)/t; 
int res = ((x/y) * z)/t; 
+0

,而不是像'中期業績=(X/Y)* Z /噸; int res =((x/y)* z)/ t;'?我有一些麻煩理解這個順序。如果是這樣,爲什麼?你能解釋一下(我會接受的答案) – 2012-08-17 12:33:22

+0

我明白了,這個結果是一樣的,只是問:) – 2012-08-17 12:33:45

+0

如果你看看解析樹:這是'乘法表達式:乘法表達@ PM-expression' 。在解析表達式時,最右邊的術語't'被隔離爲'pm-expression',其餘的被評估爲另一個'multiplicative-expression'。下一步將把'z'識別爲'pm-experssion'。 – TemplateRex 2012-08-17 12:35:39

5

n3337 5.6/1

乘法運算符*,/,和%組左到右。

讀5標準看齊。