我一直在想,为什么不能在switch语句中的case标签之后声明变量呢?在C++中,你可以在任何地方声明变量(并且声明它们接近第一次使用显然是一件好事),但下面的方法仍然无效:
开关(val)
{
案例VAL:
//这行不通
int-newVal=42;
打破
案例二:
...
打破
}
上面给出了以下错误(MSC):
“case”标签跳过了“newVal”的初始化
这在其他语言中似乎也是一个限制。为什么会出现这样的问题
Case语句只是标签。这意味着编译器会将其解释为直接跳转到标签。在C++中,问题是范围之一。您的花括号将范围定义为switch语句中的所有内容。这意味着您将有一个跳转范围,跳转将进一步执行到跳过初始化的代码中
正确的处理方法是定义特定于该case语句的范围,并在其中定义变量:
开关(val)
{
案例VAL:
{
//这会奏效的
int-newVal=42;
打破
}
案例二:
...
打破
}