widening in c++:
When evaluating expressions, the compiler breaks each expression down
into individual subexpressions. Typically, these subexpressions
involve a unary or binary operator and some operands. Most binary
operators require their operands to be of the same type. If operands of
mixed types are used, the compiler will convert one operand to agree
with the other. To do this, it uses a heirarchy of data types:
Long double (highest)
Double
Float
Unsigned long int
Long int
Unsigned int
Int (lowest)
Double
Float
Unsigned long int
Long int
Unsigned int
Int (lowest)
For example, in the expression
2 + 3.14159
, the +
operator requires both operands to be the same type. In this case, the
left operand is an int, and the right operand is a double. Because
double is higher in the heirarchy, the int gets converted to a double.
Consequently, this expression is evaluated as 2.0 + 3.14159
, which evaluates to 5.14159.
A good question is, “why is integer at the bottom of the tree? What
about char and short?”. Char and short are always implicitly promoted
to integers (or unsigned integers) before evaluation. This is called widening.
No comments:
Post a Comment