实例1:
swicth(nType)
{
case 1:
int nLocal = 1;
cout<<nLocal<<endl;
break;
case 2:
...
break;
}
此时编译会出错,错误指向case 1下的局部变量 nLocal。相信很多人在编码初期都出现过类似的错误,主要是因为我们行为上学的以为不同的case下是不同的域。
其实switch下是一个整体,也就是对于编译器来讲不论有几个case,他都是同一个代码块。既然是在同一代码块下,他们其中的变量可见域就是整个代码块。再来看上面的例子,假如这样写是没错的,那么意味着case2下也可以访问nLocal的内容,但如果此时nType=2,那么将直接进入case2分支,而nLocal的定义在case1分支下,此时case2假如也去访问nLocal,那么访问到的将是一个未经定义的变量。
解决这个问题的方法有两种,一种是将局部变量的定义提前至switch分支开始之前,另一种是在分支内给定域的划分,指定局部变量的作用域。
法1:
int nLocal = 1;
swicth(nType)
{
case 1:
cout<<nLocal<<endl;
break;
case 2:
...
break;
}
法2:
swicth(nType)
{
case 1:
{
int nLocal = 1;
cout<<nLocal<<endl;
}
break;
case 2:
...
break;