Implicit type conversion rules in C++ operators

后端 未结 9 2204
情书的邮戳
情书的邮戳 2020-11-22 00:21

I want to be better about knowing when I should cast. What are the implicit type conversion rules in C++ when adding, multiplying, etc. For example,

int + fl         


        
9条回答
  •  醉梦人生
    2020-11-22 00:41

    Arithmetic operations involving float results in float.

    int + float = float
    int * float = float
    float * int = float
    int / float = float
    float / int = float
    int / int = int
    

    For more detail answer. Look at what the section §5/9 from the C++ Standard says

    Many binary operators that expect operands of arithmetic or enumeration type cause conversions and yield result types in a similar way. The purpose is to yield a common type, which is also the type of the result.

    This pattern is called the usual arithmetic conversions, which are defined as follows:

    — If either operand is of type long double, the other shall be converted to long double.

    — Otherwise, if either operand is double, the other shall be converted to double.

    — Otherwise, if either operand is float, the other shall be converted to float.

    — Otherwise, the integral promotions (4.5) shall be performed on both operands.54)

    — Then, if either operand is unsigned long the other shall be converted to unsigned long.

    — Otherwise, if one operand is a long int and the other unsigned int, then if a long int can represent all the values of an unsigned int, the unsigned int shall be converted to a long int; otherwise both operands shall be converted to unsigned long int.

    — Otherwise, if either operand is long, the other shall be converted to long.

    — Otherwise, if either operand is unsigned, the other shall be converted to unsigned.

    [Note: otherwise, the only remaining case is that both operands are int ]

提交回复
热议问题