整数提升
整型的对象可以转换为另一个宽整型 (即可可以表示较大设置值的类型。) 转换的此扩大类型称为 “整数提升”。整数提升,在表达式中使用下面,实际上可以使用另一个整数类型:
对象、类型 char 和 short int文本和常数
枚举类型
int 位域
枚举数
C++ 提升 “值保留”。即提升后的值一定相同的值在升级之前。 在值保留的提升,较短整型对象 (如位域或对象类型 char) 提升键入 int ,如果 int 可以表示所有基元类型。 如果 int 不能表示全面值,则对象提升键入 unsigned int。 尽管此方案将与 ANSI C 中使用时,值将转换不想保留 “signedness”对象。
值保留通常保留 signedness 将产生相同的结果的提升和提升。 但是,因此,如果提升的对象是下列值之一,它们可能产生不同的结果:
/、 %、 /=、 %=、 AMP_LT、 AMP_LT=、 AMP_GT或 **AMP_GT=**操作数
这些运算符决定的结果符号。 因此,值保留和符号保留提升产生不同的结果,在对这些操作数。
AMP_GTAMP_GT 或 **AMP_GTAMP_GT=**左操作数
,在执行移位操作时,这些运算符将不同的有符号和无符号数。 为签名的数量,转换的权限导致符号位传播到操作空出的数位位置。 对于未签名的数目,则操作空出的数位位置是零填充。
对于依赖于该操作数的类型 signedness 参数匹配的重载运算符的重载函数或操作数的参数。 (有关更多 重载运算符 参见有关定义重载运算符。)