表示されているコードは、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. */
}
A特に一般的な場合は、ここで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. */
}
あなたはif
文の中double
を宣言していることであるあなたは、一般的にこのような何かを参照してください。 C++は、0以外の値を自動的にtrue
と解釈し、ゼロ値はfalse
と解釈します。このコードが意味することは、「d
を宣言し、それをfd()
と等しく設定します。0以外の場合は、if
文を実行してください。
これは、非常に悪い考えです。double
は、ほとんどの場合0にならないようなあらゆる丸め誤差の対象となるためです。 function
が非常に正常に動作していない限り、このコードはif
の本文をほぼ確実に実行します。
希望すると便利です。
[この質問]に対する答えを(http://stackoverflow.com/q/9833790/636019)だけでなく、あなたの疑問にお答えします。 – ildjarn
私はあなたが話しているセクションを読んだだけで、議論がスコープ制限として使うことについて(そしてコンパクトコードの付加的な利益を得ることについて)もっと議論されていたと感じていました。特定のデータ型。私は彼が 'ダブル 'を' int'に置き換えて、依然として彼の意図されたメッセージを渡すことができたと思う。それは私がそれをどのように読むかというだけのことだ。 – jedwards
@jedwardsはい、しかし、二重の使用は答えを懇願しています。 int宣言は依然として答えに値する異常です。 –