表示されているコードは、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
お役に立てれば!