且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C++ 运算符中的隐式类型转换规则

更新时间:2022-03-24 21:45:37

在 C++ 中(对于 POD 类型)操作符总是作用于相同类型的对象.
因此,如果它们不相同,则将提升为匹配另一个.
运算结果的类型与操作数相同(转换后).

In C++ operators (for POD types) always act on objects of the same type.
Thus if they are not the same one will be promoted to match the other.
The type of the result of the operation is the same as operands (after conversion).

if:
either is      long double       other is promoted >      long double
either is           double       other is promoted >           double
either is           float        other is promoted >           float
either is long long unsigned int other is promoted > long long unsigned int
either is long long          int other is promoted > long long          int
either is long      unsigned int other is promoted > long      unsigned int
either is long               int other is promoted > long               int
either is           unsigned int other is promoted >           unsigned int
either is                    int other is promoted >                    int

Otherwise:
both operands are promoted to int

注意.操作的最小大小为 int.所以short/char在操作完成前被提升为int.

Note. The minimum size of operations is int. So short/char are promoted to int before the operation is done.

在您的所有表达式中,int 在执行操作之前被提升为 float.操作的结果是一个float.

In all your expressions the int is promoted to a float before the operation is performed. The result of the operation is a float.

int + float =>  float + float = float
int * float =>  float * float = float
float * int =>  float * float = float
int / float =>  float / float = float
float / int =>  float / float = float
int / int                     = int
int ^ float =>  <compiler error>