何が起きてる?
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.
}
2003年標準のセクション6.4.3は、選択ステートメント条件で宣言された変数が、条件によって制御されるサブステートメントの終わりまで及ぶスコープを持つ方法を説明しています。しかし、宣言を括弧で囲まないことについて何が書かれているか、条件ごとに1つの宣言のみについて何も書かれていないことはわかりません。
この制限は、条件の宣言が1つだけ必要な場合でも厄介です。このことを考慮。
bool a = false, b = true;
if(bool x = a || b)
{
}
xをfalseに設定して 'if "-bodyスコープを入力する場合、宣言には括弧が必要です(代入演算子の優先順位は論理ORよりも低いため)が、括弧は使用できないため、外部でxを宣言する必要があります本体が、その宣言を必要以上のスコープにリークしていることは明らかです。明らかにこの例は取るに足らないものですが、より現実的なケースは、aとbがテストする必要のある値を返す関数である場合です。
それで、私は標準に準拠しないことをしたいのですか、それとも私のコンパイラは私のボールを破壊しているだけですか(VS2008)?
while
はと同じですif
。
if (int a = foo(), int b = bar(), a && b)
?カンマ演算子がオーバーロードされていない場合、標準では式は左から右に評価され、結果の値は最後の式になります。for
ループの初期化で動作しますが、ここではどうですか?
if
。
if
ます。if
ループではなく、条件付きです。