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++?
10
A
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
.
Dzięki Yu Hao! To wspaniale. Czy wiesz, gdzie jest to wspomniane w standardzie? – user2333829
@ user2333829 * §4.5 Zintegrowane promocje * –
Dzięki, odpowiedziałeś na moje pytanie! Uważam, że to dziwne, ale wyraźnie tam jest. – user2333829