2010-09-21 48 views
13

當比較大於int的類型時,應該將整數常量放在左邊還是右邊以確保執行正確的比較?Yoda條件和整數提升

int64_t i = some_val; 
if (i == -1) 

還是應:

if (-1 == i) 

是否有在其中任一種情況下不與相同比較任何情況-1LL(其中int64_tlong long)?

+5

yoda是一個偉大的標籤:) – 2010-09-21 13:48:17

+4

偉大的標籤尤達是:-) – 2012-09-24 19:32:02

回答

11

無論你把它放在右邊還是左邊都沒關係; ==操作符是完全對稱的。

如果==運算符的兩個操作數都具有算術類型(如本例中那樣),則應用「通常的算術轉換」(C99§6.5.9)。在這種情況下,適用的規則是:

如果兩個操作數已簽署的整數類型或兩者都無符號 整數類型,具有較小整數轉換等級的類型的操作數被 轉換爲操作數的類型級別更高。 (C99§6.3.1.8)

因此-1被轉換爲int64_t-1LL沒有區別。

+0

神奇,正是我想知道的。 – 2010-09-21 13:49:09

+15

除了答案:將常量放在首位的常見原因是幫助捕獲錯別字:如果錯誤鍵入了== =,那麼編譯器會抱怨你不能指定常量。反過來說(右側是常數),編譯器的抱怨是不能保證的。 – 2010-09-21 15:14:09