您看到的代码是一种在if
语句中声明变量的专用技术。你通常会看到这样的东西:
if (T* ptr = function()) {
/* ptr is non-NULL, do something with it here */
} else {
/* ptr is NULL, and moreover is out of scope and can't be used here. */
}
一个特别常见的情况是使用dynamic_cast
这里:
if (Derived* dPtr = dynamic_cast<Derived*>(basePtr)) {
/* basePtr really points at a Derived, so use dPtr as a pointer to it. */
} else {
/* basePtr doesn't point at a Derived, but we can't use dPtr here anyway. */
}
在您的情况下发生的事情是您在声明中声明了double
一个if
。C++ 自动将任何非零值解释为true
,将任何零值解释为false
. 这段代码的意思是“声明d
并设置它等于fd()
。如果它不为零,则执行该if
语句。”
也就是说,这是一个非常糟糕的主意,因为double
s 会受到各种舍入错误的影响,这些错误会在大多数情况下阻止它们为 0。除非表现得非常好,否则这段代码几乎肯定会执行if
语句的主体。function
希望这可以帮助!