亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于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語句外面定義是就可以通過


正在回答

1 回答

可以這樣寫! ?也許你的編譯器太老了,不能正確處理scope。


一般來說,不應在switch的case中定義變量,但其實并不是完全不能定義變量,而是有一定的限制。?因為執行流程可能會跳過某些case,這樣定義語句也就被跳過了,所以語法不允許跳過在同個作用域定義并初始化變量的語句,只有未初始化的聲明語句可以跳過。

但實際上case 1這個label中的for語句有獨立的作用域(C++11新增的特性),在其中定義并初始化b是允許的,所以這個代碼可以編譯通過。

2 回復 有任何疑惑可以回復我~
#1

onemoo

額,前面有誤。 for語句有獨立的作用域并不是C++11才引入的。
2015-10-28 回復 有任何疑惑可以回復我~
#2

慕神7194819 提問者

謝謝你,困擾我很久的問題終于解決了
2015-10-28 回復 有任何疑惑可以回復我~
#3

慕神7194819 提問者

太感謝了
2015-10-28 回復 有任何疑惑可以回復我~
#4

慕神7194819 提問者

非常感謝!
2015-12-09 回復 有任何疑惑可以回復我~
查看1條回復

舉報

0/150
提交
取消
C++遠征之離港篇
  • 參與學習       122678    人
  • 解答問題       493    個

C++掃清通往面向對象的最后一道障礙,將所有知識點融會貫通

進入課程

關于c++的一些變量定義問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號