2015-06-21 18 views
10

Jestem ciekawy niektórych zachowań wbudowanego typu bool w C++. Jak rozumiem, std::common_type określa typ wspólny przy użyciu niejawnej wymienialności. Spodziewam się, że wyrażenie o numerze bool i innym typie spowoduje, że bool będzie konwertował do tego typu. Na przykład widzę, że bool + float ->float i-> . Jednak bool + int8_t ->int32_t i bool + int16_t ->int32_t. Dlaczego tak jest?Dlaczego jest wspólny typ bool i int8_t an int32_t w C++?

Odpowiedz

10

Krótka odpowiedź: integralna promocja.

arytmetyki liczbowej małe typy integralny (w tym bool, char, unsigned char, signed char, short, unsigned short, etc.) są wspierane na int jeśli wszystkie możliwe wartości mieszczą się w int, w przeciwnym razie są wspierane na unsigned int.

Na większości komputerów dzisiaj int32_t jest taki sam jak int. W przypadku bool + int8_t lub bool + int16_t oba są promowane do int.

+0

Dzięki Yu Hao! To wspaniale. Czy wiesz, gdzie jest to wspomniane w standardzie? – user2333829

+1

@ user2333829 * §4.5 Zintegrowane promocje * –

+0

Dzięki, odpowiedziałeś na moje pytanie! Uważam, że to dziwne, ale wyraźnie tam jest. – user2333829