關(guān)于c++的一些變量定義問題
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;
? ?switch(a){
? ?case 1:
?for(int b=0;b<5;b++)
{ ?cout<<b;}
? break;
? ?case 2:
? cout<<"dsd";
? break;
}
?return 0;
}
我想問一下,為什么變量b在case 1:里面定義會編譯不同過的顯示
E:\c++\gf.cpp(13) : error C2360: initialization of 'b' is skipped by 'case' label
? ? ? ? E:\c++\gf.cpp(10) : see declaration of 'b'
而在switch語句外面定義是就可以通過
2015-10-28
可以這樣寫! ?也許你的編譯器太老了,不能正確處理scope。
一般來說,不應(yīng)在switch的case中定義變量,但其實并不是完全不能定義變量,而是有一定的限制。?因為執(zhí)行流程可能會跳過某些case,這樣定義語句也就被跳過了,所以語法不允許跳過在同個作用域中定義并初始化變量的語句,只有未初始化的聲明語句可以跳過。
但實際上case 1這個label中的for語句有獨立的作用域(C++11新增的特性),在其中定義并初始化b是允許的,所以這個代碼可以編譯通過。