Vik*_*ehr 10 c++ floating-point implicit-conversion
我刚碰到这行代码:
if( lineDirection.length2() ){...}
Run Code Online (Sandbox Code Playgroud)
哪里length2返回一个double.让我感到困惑的是,0.0等于0 NULL,和/或false.
这是C++标准的一部分还是未定义的行为?
Chu*_*dad 10
这是一个非常标准的行为(布尔转换)
$ 4.12/1 - "算术,枚举,指针或指向成员类型的指针的rvalue可以转换为bool类型的rvalue.零值,空指针值或null成员指针值转换为false;任何其他值转换为真."
值得注意的是,此代码对于浮点表示非常脆弱.当且仅当浮点值正好为0时,此代码才有效,这在大多数情况下实际上是不太可能的.它可能不是在这种特殊情况下,但如果是这样的话,它当然应该被记录/评论.
在几乎所有其他情况下,您需要确定一个"epsilon值"来定义您认为"相同"的浮点数范围 - 否则您的比较很可能会让您在角落里感到惊讶(通常不是那么一角)案例.