我有一個整數稱爲「計數」,當滿足某些條件時遞增。所以,我想問問,如果你寫這個條件會發生什麼:隱式bool評估,如果條件
if(count % 2)
{
return even_bit;
}
else
{
return odd_bit;
}
如果if條件上面檢查的條件計%2 = 0或計數%2的問題基本上是問= 0時,你不在整數數據類型變量的表達式中沒有明確定義它。
我有一個整數稱爲「計數」,當滿足某些條件時遞增。所以,我想問問,如果你寫這個條件會發生什麼:隱式bool評估,如果條件
if(count % 2)
{
return even_bit;
}
else
{
return odd_bit;
}
如果if條件上面檢查的條件計%2 = 0或計數%2的問題基本上是問= 0時,你不在整數數據類型變量的表達式中沒有明確定義它。
如果一個表達式求值爲0
,它將被解釋爲FALSE
- 對於任何非零值,它將被解釋爲TRUE
。換句話說,
if(count % 2)
相當於
if(count % 2 != 0)
所以,你的代碼是 「倒退」。如果陳述是真的,count
是奇怪的,你很可能會想要返回odd_bit
(只是猜測在這裏。)。
當然,這就是你爲什麼永遠不會像他那樣寫它的原因。如果表達式的類型爲'bool',那麼它就沒問題了(事實上,任何進一步的比較,例如'true'或'false'都會令人困惑)。如果它不是'bool',那麼你不會指望有點模糊和混淆的隱式轉換,而是編寫你想要的轉換。 –
@JamesKanze這是一個意見。我通常更喜歡避免不必要的比較,尤其是*當涉及到%操作符時。剩下的就是%運算符的結果。該結果的布爾評估回答了一個問題*是否存在一些餘數。 –
@JamesKanze許多C程序員也習慣於其他操作員的常見習語,例如, 'if(flag&MY_FLAG_NAME)'通常比'if(flag&MY_FLAG_NAME == MY_FLAG_NAME)'更適合。 –
if(count % 2)
相當於
if(count % 2 != 0)
現在,它都將取決於count
無論是奇數還是偶數。如果是偶數,則count%2
爲FALSE
(返回odd_bit
),如果count
爲奇數,則count%2
爲TRUE
(返回even_bit
)。
實際上,它相當於if(static_cast
第三個變體不正確,因爲_any_非零表達式將計算爲true。 –
@JamesKanze;你是對的。 – haccks
爲什麼你不能編譯和運行代碼? –
'0'爲'false',任何其他整數值爲'true'。 –
你的意思是「哪些條件得到評估」?我只看到一個條件。 – jalf