このコード フラグメントが正常に動作する理由
void foo(int i)
{
switch(i) {
case 1:
{
X x1;
break;
}
case 2:
X x2;
break;
}
}
次はコンパイルエラーになります(「x1」の初期化は「ケース」ラベルによってスキップされます)?
void foo(int i)
{
switch(i) {
case 1:
X x1;
break;
case 2:
X x2;
break;
}
}
ブレースを使用すると新しいスコープが導入されることを理解しています。したがって、ストレージは x1 の左ブレースに到達するまで割り当てられません。ただし、x2 は中かっこで囲まずにケース ラベル内で初期化されます。これもエラーではないでしょうか?
x2 の初期化は、両方のコード フラグメントで条件付きでスキップできると思います