2015-06-21 74 views
10

我很好奇C++中內建的bool類型的一些行爲。據我瞭解,std::common_type決定使用隱式可轉換性的通用類型。我期望bool和另一種類型的表達式會導致bool轉換爲該類型。例如,我可以看到bool + floatfloatbool + doubledouble。但是,bool + int8_tint32_tbool + int16_tint32_t。爲什麼會這樣?爲什麼在C++中bool和int8_t的常見類型是int32_t?

回答

10

簡短回答:積分促銷

在數值運算,小積分類型(包括boolcharunsigned charsigned charshortunsigned short等)被提升到int如果所有可能的值適合在int,否則將它們提升到unsigned int

今天大多數機器上,int32_tint相同。在bool + int8_tbool + int16_t的情況下,兩者都被提升爲int

+0

謝謝俞灝!那很棒。你知道這個標準在哪裏提到嗎? – user2333829

+1

@ user2333829 *§4.5積分促銷* –

+0

謝謝,你回答了我的問題!我覺得很奇怪,但很顯然。 – user2333829

相關問題