當比較大於int
的類型時,應該將整數常量放在左邊還是右邊以確保執行正確的比較?Yoda條件和整數提升
int64_t i = some_val;
if (i == -1)
還是應:
if (-1 == i)
是否有在其中任一種情況下不與相同比較任何情況-1LL
(其中int64_t
是long long
)?
當比較大於int
的類型時,應該將整數常量放在左邊還是右邊以確保執行正確的比較?Yoda條件和整數提升
int64_t i = some_val;
if (i == -1)
還是應:
if (-1 == i)
是否有在其中任一種情況下不與相同比較任何情況-1LL
(其中int64_t
是long long
)?
無論你把它放在右邊還是左邊都沒關係; ==
操作符是完全對稱的。
如果==
運算符的兩個操作數都具有算術類型(如本例中那樣),則應用「通常的算術轉換」(C99§6.5.9)。在這種情況下,適用的規則是:
如果兩個操作數已簽署的整數類型或兩者都無符號 整數類型,具有較小整數轉換等級的類型的操作數被 轉換爲操作數的類型級別更高。 (C99§6.3.1.8)
因此-1被轉換爲int64_t
。 -1LL
沒有區別。
神奇,正是我想知道的。 – 2010-09-21 13:49:09
除了答案:將常量放在首位的常見原因是幫助捕獲錯別字:如果錯誤鍵入了== =,那麼編譯器會抱怨你不能指定常量。反過來說(右側是常數),編譯器的抱怨是不能保證的。 – 2010-09-21 15:14:09
yoda是一個偉大的標籤:) – 2010-09-21 13:48:17
偉大的標籤尤達是:-) – 2012-09-24 19:32:02