整数类型的对象可以转换为另一个更宽的整数类型(即,可表示更大的一组值的类型)。 这种扩展类型的转换称为“整型提升”。利用整型提升,您可以在可使用其他整数类型的任何位置将以下项用于表达式:
char 和 short int 类型的对象、文本和常量
枚举类型
int 位域
枚举数
C++ 提升是“值保留”。即,提升后的值一定与提升前的值相同。 在值保留提升中,如果 int 可以表示原始类型的完整范围,较短的整数类型的对象(如 char 类型的位域或对象)将提升到 int 类型。 如果 int 无法表示完整范围的值,该对象将提升到 unsigned int 类型。 尽管此策略与 ANSI C 中使用的相同,但值保留转换不保留对象的“符号”。
值保留提升和保留符号的提升通常会生成相同的结果。 但是,如果提升的对象是以下项之一,它们可能生成不同的结果:
/、%、/=、%=、<、<=、> 或 >= 的操作数
这些运算符依赖于用于确定结果的符号。 因此,当值保留和符号保留提升应用于这些操作数时,它们将生成不同的结果。
>> 或 >>= 的左操作数
当执行移位运算时,这些运算符会区别对待有符号的数量和无符号的数量。 对于有符号的数量,将数量右移会导致符号位传播到空出的位位置。 对于无符号的数量,空出的位位置将由零填充。
重载函数的参数,或重载运算符的操作数(取决于该操作数的用于参数匹配的类型的符号)。(有关定义重载运算符的详细信息,请参阅重载运算符。)