在阅读本书编程原理和使用C ++实践时,在第3章中我们可以直接将double与int进行比较。但是,当我在Visual Studios上测试它时,它运行正常,没有错误?他不能将double与int进行比较是什么意思。后来,他解释说C ++提供了一种间接的方式。他的意思是隐式转换吗?
答案 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。
因此,如果您将int
与float
,double
或long double
进行比较,您会获得从int
到{{1}的隐式转化},float
或double
。