看起来这个片段在 clang 中编译时没有警告,即使使用 -Weverything 也是如此:
double x;
...
if (fabs(x > 1.0)) {
...
}
我错过了什么吗?或者编译器和 C++ 标准是否认为强制转换bool
to double
有道理吗?
这是制作的结果bool
积分类型。根据 C++ 标准,第 3.9.1.6 节
bool 类型的值可以是true
or false
(注:没有signed
, unsigned
, short
, or long
bool
值的类型。 ——尾注)bool类型的值参与积分促销。 (重点已添加)
这使得值bool
待提升的表达式float
以同样的方式int
s 会在没有警告的情况下升级,如第 4.5.6 节所述:
类型的纯右值bool
可以转换为类型的纯右值int
, with false
变为零并且true
成为一体。
EDIT :从 C++11 开始fabs
为整数类型提供额外的重载,因此促销直接来自bool
to int
,并停在那里,因为过载fabs
可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)