C++:switchcase中的初始化并不总是给出错误
我读到 switch 情况下的初始化应该给出编译器错误。但是当我尝试了两个不同的版本时。一个是没有给出错误(Ex1),我不明白为什么。
例 1:
switch (i)
{
case 1:
int k;
break;
case 2:
int j=3;
break;
}
例2:
switch (i)
{
case 1:
int k=3;
break;
case 2:
int j;
break;
}
回答
在 switch 块中,在 a 之前的每个声明都case可以在那个case. 当有出现的错误case,以使switch能跳位于一个变量,你可以访问那里的初始化之后。如果case跳转到,您可以使用该变量,尽管它从未发生过初始化。
在第一个示例中,没有case哪个会跳过初始化。唯一的初始化是int j=3;在每个之后出现,case因此不能跳过。k未初始化,因此不能跳过其初始化。
在第二个例子中,if i == 2thenk的初始化将被跳过。
一种解决方案是为每个案例定义一个范围。然后,为 a 定义的变量case只能从中访问,case并且不会发生问题。例如 :
void foo(int i)
{
switch (i)
{
case 1:
{
int k=3;
break;
}
case 2:
{
// k is not accessible here
int j;
break;
}
}
}