[英]Possible incorrect operators priority
考慮以下偽代碼:
int x = 10;
int y = 10;
x = x + x++;
y = y++ + y;
print(x); // 20
print(y); // 21
像 C# 或 Java 這樣的類 C 編程語言說增量比+
運算符具有更高的優先級。 所以在這兩種情況下它都應該是21
。
為什么它打印兩種不同的結果?
請記住,我們是從左到右工作的。
讓我們先處理 x 然后處理 y。
x = x + x++;
我們從左到右...
x = 10 + (10++)
注意:當我們從左到右時,最右側 x 上的后增量運算符對首先出現在 RHS 上的 x 沒有影響。
x = 20
y = y++ + y;
y = 10++ + 11;
我們再次從左到右,增量運算符 post 將 y 從 10 增加到 11,因此最右側的 y 變為 11,從而產生 (10 + 11) = 21。
我相信+
運算符的優先級高於++
,所以+
運算符首先被評估,但為了評估它 - 它必須評估它的左右運算符。
在第二個示例中,首先評估左運算符,因此在評估右手之前y
遞增。
在Precedence and Order of Evaluation文檔中,您可以看到+
高於+=
,這基本上就是++
。 +
上面是前綴++
,不要與后綴++
混淆。
當y++ + y
被評估時, y++
在y
之前被評估。 因此,左側的計算結果為 10,由於先前的增量,右側的計算結果為 11。 當計算x + x++
, x
在x++
之前計算。 所以兩邊都將被評估為 10,然后x
將被評估為 11,就在=
操作數將x
評估為 20 之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.