为了账号安全,请及时绑定邮箱和手机立即绑定

关于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++远征之离港篇
  • 参与学习       122700    人
  • 解答问题       474    个

C++扫清通往面向对象的最后一道障碍,将所有知识点融会贯通

进入课程

关于c++的一些变量定义问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信