switch-case ステートメントでは、declaration-with-initializationは無効ですが、declaration-and-then-assignmentは許可されています。次のコード スニペットに示すように。
コンパイラ側から見たこれら 2 種類の初期化の違いは何ですか? また、最初のタイプの初期化が無効で、2 番目のタイプが有効なのはなぜですか。
switch(val)
{
case 0:
int newVal = 42; //Invalid
break;
case 1:
int newVal2; //Valid
newVal2 = 42;
break;
case 2:
break;
}