将double与int进行比较

时间:2018-05-09 13:18:02

标签: c++ comparison type-safety

在阅读本书编程原理和使用C ++实践时,在第3章中我们可以直接将double与int进行比较。但是,当我在Visual Studios上测试它时,它运行正常,没有错误?他不能将double与int进行比较是什么意思。后来,他解释说C ++提供了一种间接的方式。他的意思是隐式转换吗?

2 个答案:

答案 0 :(得分:3)

是的,有隐式转换。

考虑以下计划:

bool f()
{
    return 3 == 3.0;
}

如果你由Clang生成look at the AST,那么你会看到隐式转换的位置。 Clang称之为ImplicitCastExpr

  `-BinaryOperator <col:12, col:17> 'bool' '=='
    |-ImplicitCastExpr <col:12> 'double' <IntegralToFloating>
    | `-IntegerLiteral <col:12> 'int' 3
    `-FloatingLiteral <col:17> 'double' 3.000000e+00

答案 1 :(得分:3)

C ++在[over.built]中定义了一组内置运算符。等于运算符的行为在[expr.eq]中定义,特别是:

  

6 如果两个操作数都是算术类型或枚举类型,则对两个操作数执行usual arithmetic conversions;如果指定的关系为真,则每个运算符应为true,如果为假则为false。

usual arithmetic conversions暗示:

  

(1.3) 否则,如果任一操作数为double,则另一个操作数应转换为double。

因此,如果您将intfloatdoublelong double进行比较,您会获得从int到{{1}的隐式转化},floatdouble