Hi, I was interested why, for example, byte
and short
literals do not have their own unique suffixes (like L
for long
or u
for unsigned int
literals) and found the following explanation:
- "I guess short literal is not supported solely due to the fact that anything less than
int
will be "promoted" toint
during evaluation.int
has the most natural size. This is called integer promotion in C++."
Which raised another question: since objects of types smaller than int
are promoted to int
to use integer arithmetic on them anyway, is there any point in using anything of integer type less than int
other than to limit the range of values that can be assigned to a variable at compile time? Are these data types there because of some historical reasons (maybe byte
and/or short
were "natural" for some architectures before)?
People say that there is no advantage for using byte
/short
type for integer objects over an int for a single variable, however, as they say, this is not true for arrays, where you can save some memory space by using byte
/short
instead of int
. But isn't any further manipulations with these array objects will produce results of type int
anyway? Don't you have to cast these objects over and over again after manipulating them to write them back into that array or for some other manipulations with these smaller types objects? Or is this only useful if you're storing some array of constants for reading purposes?
Some people say that these promoting and casting operations in summary may have an even slower overall effect than simply using int, so I'm kind of confused about the use cases of these data types... (I think that my misunderstanding comes from not knowing how things happen at a slightly lower level of abstractions, like which operations require memory allocation, which do not, etc. Maybe some resource recommendations on that?) Thanks!