"通常的算术转换"和"整数促销"是一回事吗?

Joh*_*ohn 2 c c++ integer-promotion

"通常的算术转换"和"整数促销"是一回事吗?我已阅读的"通常的算术转换"用于使表达的相同类型的操作数,而"整数优惠"用于促进小于类型intint,但在MSDN这两个概念"在通常放置算术转换"仅限.

Lig*_*ica 5

没有.

通常的算术转换涉及到在某些情况下积分的推广,但是这是两个不同的机制:

[C++14: 5/10]:许多期望算术或枚举类型的操作数的二元运算符会以类似的方式引起转换并产生结果类型.目的是产生一个通用类型,它也是结果的类型.此模式称为通常的算术转换,其定义如下:

  • 如果任一操作数具有作用域枚举类型(7.2),则不执行任何转换; 如果另一个操作数的类型不同,则表达式格式不正确.
  • 如果任一操作数是类型long double,则另一个操作数应转换为long double.
  • 否则,如果任一操作数是double,则另一个操作数应转换为double.
  • 否则,如果任一操作数是float,则另一个操作数应转换为float.
  • 否则,应对两个操作数执行整体促销(4.5).61然后,以下规则应适用于提升的操作数:
    • 如果两个操作数具有相同的类型,则不需要进一步转换.
    • 否则,如果两个操作数都具有有符号整数类型或两者都具有无符号整数类型,则具有较小整数转换等级类型的操作数应转换为具有较大等级的操作数的类型.
    • 否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数的类型的秩,则具有有符号整数类型的操作数应转换为具有无符号整数类型的操作数的类型.
    • 否则,如果具有有符号整数类型的操作数的类型可以表示具有无符号整数类型的操作数类型的所有值,则具有无符号整数类型的操作数应转换为具有有符号整数类型的操作数的类型.
    • 否则,两个操作数都应转换为与带符号整数类型的操作数类型相对应的无符号整数类型.

C11中的措辞大致相同.

注意,整体促销也可以在与通常的算术转换无关的情况下执行,例如比特移位的LHS操作数; 最终,这就是为什么这两种机制都有自己独特的名字!