Мне интересно узнать о поведении встроенного типа bool
в С++. Насколько я понимаю, std::common_type
определяет общий тип с использованием неявной конвертируемости. Я ожидал бы, что выражение с bool
и другим типом приведет к преобразованию bool в этот тип. Например, я вижу, что bool + float
→ float
и bool + double
→ double
. Однако bool + int8_t
→ int32_t
и bool + int16_t
→ int32_t
. Почему это так?
Почему общий тип bool и int8_t - int32_t в С++?
Ответ 1
Короткий ответ: интегральное продвижение.
В числовой арифметике небольшие интегральные типы (включая bool
, char
, unsigned char
, signed char
, short
, unsigned short
и т.д.) повышаются до int
, если все возможные значения соответствуют в int
, в противном случае они повышаются до unsigned int
.
На большинстве машин сегодня int32_t
совпадает с int
. В случае bool + int8_t
или bool + int16_t
, оба повышаются до int
.