switch-case內不能定義變量?

1. 報錯this

switch(something)spa

{內存

  case a:作用域

    int a = 0;it

    break;編譯

  default:變量

    break;  error

}co

結果報錯:cas

error: cannot jump from switch statement to this case label……

 

2. 錯誤緣由

究其根本緣由,是C++的一條規則:在任何做用域內,假如存在變量初始化語句,該初始化語句不能夠被跳過,必定要執行

這裏強調在做用域內的變量一旦初始化就不能跳過,可是能夠跳過整個做用域!

好比初始化語句int a=0,就有雖然進入其所在的做用域,可是不被執行的風險,因此就報錯了!

 

3. 如何修改

①把int a;移到switch和case之間:

switch(something)

{

  int a;

  case a:

    a = 0;

    break;

  default:

    break;  

}

②在case後+做用域符號{}

switch(something)

{

  case a:

  {

    int a = 0;

    break;

  }

  default:

    break;  

}

這兩種修改,都保證了只要進入a的做用域,都會執行a的初始化語句!

 

4. 判斷對錯

switch(something)

{

  case a:

    int a;

    break;

  case b:

    a = 5;

    break;

  default:

    break;  

}

在C++中是正常編譯和執行的,由於:int a只是定義了a,並無初始化,沒有違背上述規則!

編譯的時候,編譯到case a的時候分配空間,編譯到case b的時候賦值,a的做用域就是switch後的整個{},徹底沒有問題。

 

5. 關於聲明、定義和初始化:

①聲明變量不會分配內存空間;

②定義變量int a,編譯的時候會分配內存,可是並不會產生任何可執行的代碼,

因此int a這句話只是在編譯的時候有用,執行的時候跳過的時候也無所謂!

③初始化變量分配空間並初始化(編譯時分配空間,運行時初始化賦值),假如存在,必定要執行!

相關文章
相關標籤/搜索