我一直想知道-为什么您不能在switch语句中的case标签之后声明变量?在C ++中,几乎可以在任何地方声明变量(并且声明它们接近首次使用显然是一件好事),但以下操作仍然无效:
switch (val)
{
case VAL:
// This won't work
int newVal = 42;
break;
case ANOTHER_VAL:
...
break;
}
上面给了我以下错误(MSC):
“ newVal”的初始化被“ case”标签跳过
这似乎也是其他语言的限制。为什么会有这样的问题?
Case
语句只是标签。这意味着编译器会将其解释为直接跳转到标签。在C ++中,这里的问题是范围之一。大括号将范围定义为switch
语句中的所有内容。这意味着您将拥有一个范围,在该范围内将进一步执行跳过初始化的代码。
处理此问题的正确方法是定义特定于该case
语句的作用域,并在其中定义变量:
switch (val)
{
case VAL:
{
// This will work
int newVal = 42;
break;
}
case ANOTHER_VAL:
...
break;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句