情形1:不允許執行
switch (a)
{
case 1:
int a = 0;
//stuff
break;
case 2:
//stuff
break;
}
情形2:允許執行
switch (a)
{
case 1:
{
int a = 0;
//stuff
}
break;
case 2:
//stuff
break;
}
在使用switch的過程中,出現error: jump to case label,這往往是因爲不注意作用域造成的。
C/C++約定,在塊語句中,物件的作用域從物件的宣告語句開始直到塊語句的結束,也就是說default標號後的語句是可以使用物件a的。如果程式執行時從switch處跳到default處,就會導致物件a沒有被正確地初始化。確保物件的初始化可是C++的重要設計哲學,所以編譯器會很嚴格地檢查這種違例情況,像上述的範例程式碼中default語句後面並沒有使用a,但考慮到以後程式碼的改動可能無意中使用,所以一樣被封殺。
轉:https://blog.csdn.net/yang_lang/article/details/6713403
建議看此篇 很詳細