整数和浮点提升

整数和浮点促销 会自动用作常规算术转换和缺省自变量促销的一部分。 积分和浮点促销不会更改值的符号或量级。 有关通常算术转换的更多信息,请参阅 通常算术转换

仅开始 C++11

wchar_t 的积分促销规则

如果某个值的类型为 wchar_t ,那么可以将该值的类型转换为以下类型中的第一个类型,这些类型可以表示底层类型 wchar_t 的所有值:
  • int
  • unsigned int
  • long int
  • unsigned long int
  • long long int
  • unsigned long long int
如果列表中的任何类型都不能表示底层类型 wchar_t 的所有值,那么会将 wchar_t 类型转换为底层类型 wchar_t。
仅限 C++11

位字段的积分提升规则

仅开始 C 规则适用于以下情况:
  • -qupconv 选项已生效。
  • 整数位字段的类型为 unsigned
  • 整数位字段的类型小于 int 类型。
如果满足所有这些条件,那么下列其中一个规则适用于积分位字段的提升:
  • 如果 unsigned int 类型可以表示整数位字段的所有值,那么位字段将转换为 unsigned int
  • 否则,不会将任何积分提升应用于位字段。
如果不满足其中任何条件,那么下列其中一个规则适用于积分位字段的提升:
  • 如果 int 类型可以表示整数位字段的所有值,那么位字段将转换为 int
  • 否则,如果 unsigned int 类型可以表示所有值,那么位字段将转换为 unsigned int
  • 否则,不会将任何积分提升应用于位字段。
仅限 C
仅开始 C++ 下列规则之一适用于整型位域的升级:
  • 如果 int 类型可以表示整数位字段的所有值,那么位字段将转换为 int
  • 否则,如果 unsigned int 类型可以表示所有值,那么位字段将转换为 unsigned int
  • 否则,不会将任何积分提升应用于位字段。
仅限 C + +

布尔值的积分提升规则

仅开始 C 如果 选项生效,布尔值将转换为 类型,且值不变。 -qupconv unsigned int 否则,如果 -qnoupconv 选项生效,则布尔值将转换为 int 类型,且其值保持不变。 仅限 C

仅限 C + + 如果布尔值是 ,则转换为值为0的。 false int 如果布尔值为 true,那么会将其转换为值为 1 的 int

其他类型的积分促销规则

仅开始 C 规则适用于以下情况:
  • -qupconv 选项已生效。
  • 除位字段和布尔值以外的整数类型的类型为 unsigned
  • 整数类型的类型小于 int 类型。
如果满足所有这些条件,那么整数类型将转换为 unsigned int 类型。
如果不满足其中任何条件,那么下列其中一条规则适用于整数类型的提升:
  • 如果整数类型可以由 int 类型表示,并且其列组低于 int的列组,那么整数类型将转换为 int 类型。
  • 否则,整数类型将转换为 unsigned int 类型。
仅限 C
仅开始 C++ 以下规则之一适用于整数类型(wchar_t、位域和布尔值除外)的推广:
  • 如果整数类型可以由 int 类型表示,并且其列组低于 int的列组,那么整数类型将转换为 int 类型。
  • 否则,整数类型将转换为 unsigned int 类型。
仅限 C + +

浮点提升规则

可以将 float 类型转换为 double 类型。 提升后不会更改 float 值。