簡體   English   中英

將函數的整數返回值與C ++中的bool進行比較

[英]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() ,它返回falsetrue

同樣在第1行中,函數func()的返回值是根據布爾值檢查的。

我想知道這種用法是否有任何問題。 如果有問題,建議需要進行哪些整改。

沒有問題,任何非零整數都轉換為true ,零為false 相反, bool可以轉換為inttrue轉換為1false轉換為0

比較布爾值時,您不需要如此冗長:

if (!func()) { .... }

當然,如果函數只返回truefalse ,就像在你的例子中一樣,那么它直接返回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轉換為0true轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM