Dan*_*nra 6 c++ clang compiler-warnings implicit-conversion
看起来这个片段在clang中编译而没有警告,即使是-Weverything:
double x;
...
if (fabs(x > 1.0)) {
...
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?还是做编译器和C++标准认为铸造bool到double的东西,有道理?
这是制作bool整体类型的结果.根据C++标准,第3.9.1.6节
bool类型的值可以是
true或false(注:没有signed,unsigned,short,或longbool类型或值-尾注.)bool类型的值参与积分促销活动.(重点补充)
这使得bool表达式的值以与提升s float相同的方式int被提升,而没有警告,如4.5.6节所述:
类型的prvalue
bool可以转换为类型的prvalueint,false变为零并true成为一个.
编辑:用C++ 11开始fabs提供了完整的类型的其他重载,因此促进直接去bool到int,并停止在那里的,因为过载fabs可用于它.