[英]Comparing the integer return value of a function to bool in C++
請考慮以下C ++代碼段:
...
if (false == func()) // Line #1
{
...
...
}
int func()
{
...
{
...
return false;
}
...
return true;
}
在上面的代碼片段中,函數func()
的原型表明它返回一個整數。 但是在函數func()
,它返回false
或true
。
同樣在第1行中,函數func()
的返回值是根據布爾值檢查的。
我想知道這種用法是否有任何問題。 如果有問題,建議需要進行哪些整改。
沒有問題,任何非零整數都轉換為true
,零為false
。 相反, bool
可以轉換為int
, true
轉換為1
, false
轉換為0
。
比較布爾值時,您不需要如此冗長:
if (!func()) { .... }
當然,如果函數只返回true
或false
,就像在你的例子中一樣,那么它直接返回bool
有意義的:
bool func();
從標准
4.7完整轉換
如果目標類型是bool,請參見4.12。 如果源類型為bool,則將值false轉換為零,將值true轉換為一。
4.12布爾轉換[conv.bool]
算術,無范圍枚舉,指針或指向成員類型的指針的prvalue可以轉換為bool類型的prvalue。 零值,空指針值或空成員指針值轉換為false; 任何其他值都轉換為true。 類型為std :: nullptr_t的prvalue可以轉換為bool類型的prvalue; 結果值為false。
在func
里面,你提供的bool
被轉換為int
以便返回。 false
轉換為0
, true
轉換為1
。
在比較中,您的常量false
將轉換為int
,值為0
。
一般來說,如果你選擇一個代碼,你的代碼會更好讀:要么全部使用bool
類型,要么使用int
類型和值0
。
在函數func()中,源類型為bool,目標類型為int(因為函數的返回類型為int),因此值false將轉換為零,值true將轉換為值之一目的地類型。 當返回到第1行時,這個int會自動轉換為bool,因為func可以返回1或0,值0變為false,1變為true。 如果func返回任何非零值,它將在第1行自動轉換為true。
請在“積分轉換”和“布爾轉換”部分中查看此網站 。
Sureley對這種用法沒有任何問題,但我必須說它不易讀取,特別是如果代碼變得更復雜並且應由未編寫此代碼的其他人維護。 你為什么不簡單地讓func返回bool?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.