我刚遇到了这行代码:
if( lineDirection.length2() ){...}
length2
返回一个 double
类型。让我感到困惑的是,为什么 0.0 相当于 0、NULL
和/或 false
。
这是 C++ 标准的一部分吗?还是未定义的行为?
我刚遇到了这行代码:
if( lineDirection.length2() ){...}
length2
返回一个 double
类型。让我感到困惑的是,为什么 0.0 相当于 0、NULL
和/或 false
。
这是 C++ 标准的一部分吗?还是未定义的行为?
这是一个非常标准的行为(布尔转换)
$4.12/1 - “算术、枚举、指针或指向成员类型的右值可以转换为布尔类型的右值。零值、空指针值或空成员指针值将被转换为false;任何其他值将被转换为true。”
double d = 0.0 / -1.0; if (d)
将返回false,因为-0.0 != 0.0
,对于许多其他可能产生接近于0
但不是完全等于0.0
值的操作也是如此。 - David Rodríguez - dribeas-0.0 == 0.0
。这非常重要。当除以零时,表达式(x==0.0 || (1.0/x))
将不会计算1.0/x
。 - MSalters0.0
。问题出现在任何算术运算时,因为浮点数的精确比较很困难,在许多情况下会失败。请阅读此文章:http://docs.sun.com/source/806-3568/ncg_goldberg.html。 - David Rodríguez - dribeas