Numeric promotion
Whenever a value from one type is converted into a value of a larger similar data type, this is called a numeric promotion (or widening, though this term is usually reserved for integers). For example, an int can be widened into a long, or a float promoted into a double:
1
2
long l(64); // widen the integer 64 into a long
double d(0.12f); // promote the float 0.12 into a double
While the term “numeric promotion” covers any type of promotion, there are two other terms with specific meanings in C++:
Integral promotion involves the conversion of integer types narrower than int (which includes bool, char, unsigned char, signed char, unsigned short, signed short) to an integer (if possible) or an unsigned int.
Floating point promotion involves the conversion of a float to a double.
Integral promotion and floating point promotion are used in specific cases to convert smaller data types to int/unsigned int or double, because those data types are generally the most performant to perform operations on.
The important thing to remember about promotions is that they are always safe, and no data loss will result.
Source:
http://www.learncpp.com/cpp-tutorial/44-implicit-type-conversion-coercion/