我一直想知道 - 为什么不能在 switch 语句中的 case 标签之后声明变量?在 C++ 中,您几乎可以在任何地方声明变量(并且在接近第一次使用时声明它们显然是一件好事),但以下仍然行不通:
switch (val)
{
case VAL:
// This won't work
int newVal = 42;
break;
case ANOTHER_VAL:
...
break;
}
以上给了我以下错误(MSC):
“case”标签跳过“newVal”的初始化
这似乎也是其他语言的限制。为什么会出现这样的问题?
原文由 Rob 发布,翻译遵循 CC BY-SA 4.0 许可协议
Case
语句只是 标签。这意味着编译器会将其解释为直接跳转到标签。在 C++ 中,这里的问题是范围之一。您的大括号将范围定义为switch
语句中的所有内容。这意味着您将留下一个范围,在该范围内将进一步执行跳转到跳过初始化的代码。处理此问题的正确方法是定义特定于
case
语句的范围并在其中定义您的变量: