[英]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)。
據我所知,從一開始就是如此(標准的修訂版本沒有區別)。
我不認為對true
或false
進行明確比較有任何性能影響,但我不會自己做,因為我認為它是多余的,而不是產生任何好處的方式。
它們沒有轉換,bool實際上是ARE整數類型。
看標准:
“bool類型的值是true還是false。如下所述,bool值表現為整數類型.bool類型的值參與整體促銷”~C ++ 03
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.