在C#中,沒有任何人知道爲什麼下面將編譯:前和後遞增/遞減運營商在C#
int i = 1;
++i;
i++;
但這不會編譯?
int i = 1;
++i++;
(編譯錯誤:一個增量或減量運算符的操作數必須是一個變量,屬性或索引。)
在C#中,沒有任何人知道爲什麼下面將編譯:前和後遞增/遞減運營商在C#
int i = 1;
++i;
i++;
但這不會編譯?
int i = 1;
++i++;
(編譯錯誤:一個增量或減量運算符的操作數必須是一個變量,屬性或索引。)
中,遞增/遞減的結果是一個值 - 你不能使用遞增/遞減的值,它必須是一個可以設置的變量。
我的猜測:避免這樣的難看的和不必要的構建體。此外,它會使用2個操作(2x INC)而不是一個(1x ADD 2)。
是的,我知道......「但我想增加兩個,我是一個l33t g33k!」
好了,不要成爲一個怪胎,寫的東西,看起來並不像一個無心之失,是這樣的:你在其他的結果運行一個操作數
i += 2;
這有點苛刻你不覺得嗎?他只問它爲什麼不編譯 - 一個關於編譯器設計的問題,而不是關於代碼風格。 – fluffels 2008-10-06 17:51:15
我的猜測是++我返回一個整數值類型,然後嘗試應用++運算符。看到你無法寫入一個值類型(想想0 ++,如果這樣做有道理),編譯器會發出一個錯誤。
換句話說,這些語句被解析爲這個順序:
++i (i = 2, returns 2)
2++ (nothing can happen here, because you can't write a value back into '2')
出於同樣的原因,你不能說
5++;
或
f(i)++;
函數返回一個值,而不是一個變量。增量運算符也返回值,但不能應用於值。
它是一個合法的問題,爲什麼要讓他失望? – Will 2008-10-06 13:18:15