Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is the common type of bool and int8_t an int32_t in C++?

I'm curious about some of the behavior of the builtin bool type in C++. As I understand it, std::common_type determines the common type using implicit convertibility. I would expect that an expression with bool and another type would cause bool to convert to that type. For instance, I can see that bool + float -> float and bool + double -> double. However, bool + int8_t -> int32_t and bool + int16_t -> int32_t. Why is this the case?

like image 262
user2333829 Avatar asked Jun 21 '15 12:06

user2333829


1 Answers

Short answer: integral promotion.

In numerical arithmetic, small integral types (including bool, char, unsigned char, signed char, short, unsigned short, etc) are promoted to int if all the possible values fit in int, otherwise they are promoted to unsigned int.

On most machines today, int32_t is the same as int. In the case of bool + int8_t or bool + int16_t, both are promoted to int.

like image 77
Yu Hao Avatar answered Oct 02 '22 18:10

Yu Hao