簡體   English   中英

在比較期間,C ++ bool是否轉換為整數?

[英]Are C++ bools converted to ints during comparison?

在C ++中使用比較運算符時,bool是否轉換為整數?

我問的原因是在if語句中是否始終明確地與true / false比較的問題出現了。 這兩個選項是:

1) if (my_bool == true) doSomething();
2) if (my_bool) doSomething();

我們認為你應該通常避免明確的比較(1),因為以下內容:

int myFunc(){return 4;}
if (myFunc() == true) doSomething();

如果您需要使用簡單地返回非零以指示“true”的C接口,則會出現類似上面代碼的內容。 myFunc()示例在C中會失敗,因為myFunc返回4, true為宏,為1,而4 == 1不為真。

在C ++中仍然如此嗎? “等於”運算符是否將bool轉換為int而不是相反? 我很欣賞對標准的引用(C ++ 11是我正在使用的),但是如果它在我不想知道的語言版本之間有所不同。

(我想特別詢問明確的真/假比較的利弊,但這看起來似乎是主觀的。)

在C ++中使用比較運算符時,bool是否轉換為整數?

是。 對於關系運算符([expr.rel] / 5):

通常的算術轉換是在算術或枚舉類型的操作數上執行的。

對於相等運算符([expr.eq] / 6):

如果兩個操作數都是算術類型或枚舉類型,則對兩個操作數執行通常的算術轉換;

當兩個操作數都是bool ,它們都被提升為int 如果一個操作數是bool而另一個是整數類型,則bool操作數被提升為int 見[expr] / 10:

否則,應對兩個操作數執行整體促銷(4.5)。

據我所知,從一開始就是如此(標准的修訂版本沒有區別)。

我不認為對truefalse進行明確比較有任何性能影響,但我不會自己做,因為我認為它是多余的,而不是產生任何好處的方式。

它們沒有轉換,bool實際上是ARE整數類型。

看標准:

“bool類型的值是true還是false。如下所述,bool值表現為整數類型.bool類型的值參與整體促銷”~C ++ 03

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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