概要
この質問は、if ステートメントの条件部分で変数を定義することに関連していますか? .
では、なぜ同じ場所で新しく定義された変数の値を確認できないのでしょうか?
簡単な例
言い換えれば、これは許可されています(リンクされた質問から):
if( int* x = new int( 20 ) )
{
std::cout << *x << "!\n";
delete x;
}
しかし、これはそうではありません:
if( NULL != ( int* x = new int( 20 ) ) )
{
std::cout << *x << "!\n";
delete x;
}
2番目のものは私に与えます:
test.cpp:xx: error: expected primary-expression before ‘int’
test.cpp:xx: error: expected ‘)’ before ‘int’
質問
そして (おそらく) ここでより重要な質問 - 最初の条件はどのようにif
評価されるのですか? 私のテストによると、両方のオプションが同じことを行うようです - false
( 0
、NULL
、何でも) に対する暗黙のチェックがあります。しかし、それは標準で保証されていますか?
実際の例
OK、新しい変数をカスタム値と比較することはできませんが、比較することはできfalse
ます。template
したがって、ここに実際の例を示します。メソッドを含むクラスがあります: check_class
。このメソッドはdynamic_cast
、内部ポインタを処理します。今、私はそれを次のように使いたいです:
if( some_class* some_class_ptr = cmd->check_class< some_class >() )
{
// some_class_ptr is NOT NULL here
}
else if( other_class* other_class_ptr = cmd->check_class< other_class > )
{
// other_class_ptr is NOT NULL here
}
// ...
これが必要な理由は、if
かなり長くなり、その前にすべての変数を宣言したくないからです。