The output operator <<
when being passed a char
(signed or unsigned) will write it as a character.
Those function will return values of type unsigned char
. And as noted above that will print the characters those values represent in the current encoding, not their integer values.
The +
operator converts the unsigned char
returned by those functions to an int
through integer promotion. Which means the integer values will be printed instead.
An expression like +std::numeric_limits<unsigned char>::lowest()
is essentially equal to static_cast<int>(std::numeric_limits<unsigned char>::lowest())
.