在C++ 11类型推断期间,有哪些规则可以控制优先级?

Gea*_*phy 2 c++ type-inference c++11

有关浮点/双精度类型的C++ 11类型推断中的优先级的规则是什么,例如,从包含多个类型的表达式推断时,如下所示:

auto var = float(1) * double(1);
Run Code Online (Sandbox Code Playgroud)

Kir*_*rov 8

结果将是一个double.这叫做floating point promotion.

从标准,ISO 14882:2011,4.6浮点推广:

1 float类型的prvalue可以转换为double类型的prvalue.该值保持不变.
2此转换称为浮点促销.


正如@sftrabbit所述,在5.表达式中,新标准中的第9段:

许多期望算术或枚举类型的操作数的二元运算符会以类似的方式引起转换并产生结果类型.目的是产生一个通用类型,它也是结果的类型.

此模式称为通常的算术转换,其定义如下:

- 如果任一操作数具有作用域枚举类型(7.2),则不执行任何转换; 如果另一个操作数的类型不同,则表达式格式不正确.
- 如果任一操作数的类型为long double,则另一个操作数应转换为long double.
- 否则,如果任一操作数为double,则另一个操作数应转换为double.
- 否则,如果任一操作数是浮点数,则另一个操作数应转换为浮点数.
- 否则,应对两个操作数执行整数促销(4.5).

  • @sftrabbit - 这就是我要找的:)我会编辑添加这个引用. (2认同)