ここでは何が起こっていますか? 2003標準でC++、 'if'式の変数宣言
if(int a = Func1())
{
// Works.
}
if((int a = Func1()))
{
// Fails to compile.
}
if((int a = Func1())
&& (int b = Func2()))
)
{
// Do stuff with a and b.
// This is what I'd really like to be able to do.
}
6.4.3は、選択文の条件で宣言された変数は、条件によって制御されるサブステートメントの最後までスコープを持っているかexpains。しかし、私は宣言の周りにかっこを置くことができないということについては何も言及していませんし、条件ごとに1つの宣言についてしか何も言いません。
この制限は、条件内で1つの宣言だけが必要な場合でも迷惑です。このことを考慮。私はfalseにXが設定された「もし "-body範囲を入力する場合
bool a = false, b = true;
if(bool x = a || b)
{
}
は、宣言は(代入演算子は、論理ORよりも低い優先順位を持っているので)括弧が必要ですが、括弧ので、することはできません明らかに、この例は些細なものですが、より現実的な場合は、aとbがテストする必要のある値を返す関数である場合があります。
標準に準拠しないか、私のコンパイラが自分のボール(VS2008)をちょうど破っているのですか?
"ループを" < - "と入力したい場合、例には' if'があります。 'if'はループではなく、条件付きです。 – crashmstr
@crashmstr:trueですが、 'while'の条件は' if'と同じです。 –
これはコンマ演算子ではできませんか?つまり、if(int a = foo()、int b = bar()、a && b) '?カンマ演算子がオーバーロードされていない場合、標準では式が左から右へ評価され、結果の値は最後の式であることが示されます。それは 'for'ループの初期化で動作します、なぜここにはありませんか? – Archie