switch()的相关注意事项
这是我编程中没有注意到的地方吗,可能是我习惯用case和if的方式代替switch。但是还是需要了解的。
在C/C++中,switch的参数类型只能是bool,(unsigned) char,(unsigned) int,(unsigned) long等整数类型,还有一种特殊的类型–枚举类型也可以作为switch的参数,但是其他自定义类型就不可以了。
double,float,string等是不可以作为switch的参数的,switch的参数也不可以是指针类型!
C++中使用switch还会经常遇到下面的问题:
int main()
{
char op;
cin>>op;
switch(op)
{
case '0':
int a=3;
break;
default:
break;
}
return 0;
}
这里,我们在switch中定义了变量,int a=3,这样是编译报错的,因为C++规定,不能跳过初始化语句,而这里,我们是在switch的{}中使用定义初始化语句int a=3的,a是属于switch{}作用域的,但是有可能执行不到初始化语句,所以这样是违反语法的,但是,如果我们把int a=3这个初始化语句改成,int a;a=3;
那么就是可以的,同时a的作用域是在整个{}中的(int a是声明语句,不是初始化语句)
关于上面的问题,我们应该注意到a的作用域问题,所以建议在每个case中加入{}防止出现不小心的bug。
一条评论
添加新评论
- Pingback: C++技术岗位-笔试面试题总结【持续更新…】 - Veaxen's