为什么不能在switch语句中声明变量?

我一直想知道-为什么您不能在switch语句中的case标签之后声明变量?在C ++中,几乎可以在任何地方声明变量(并且声明它们接近首次使用显然是一件好事),但以下操作仍然无效:

switch (val)  
{  
case VAL:  
  // This won't work
  int newVal = 42;  
  break;
case ANOTHER_VAL:  
  ...
  break;
}  

上面给了我以下错误(MSC):

“ newVal”的初始化被“ case”标签跳过

这似乎也是其他语言的限制。为什么会有这样的问题?

TJ西布鲁克斯

Case语句只是标签这意味着编译器会将其解释为直接跳转到标签。在C ++中,这里的问题是范围之一。大括号将范围定义为switch语句中的所有内容这意味着您将拥有一个范围,在该范围内将进一步执行跳过初始化的代码。

处理此问题的正确方法是定义特定于该case语句的作用域,并在其中定义变量:

switch (val)
{   
case VAL:  
{
  // This will work
  int newVal = 42;  
  break;
}
case ANOTHER_VAL:  
...
break;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不能在字符串上使用switch语句?

为什么在switch语句中不能完全限定枚举值?

为什么不能在if语句中声明变量?

为什么在Java的switch语句中不能使用“ continue”?

为什么不能在DELETE语句中使用别名?

为什么不能在动态SQL的DDL / SCL语句中使用绑定变量?

为什么不能在switch语句中使用元组常量作为大小写

为什么不能在if语句之后立即定义变量

为什么最终变量不能在switch语句中使用?

为什么不能在此if语句中使用我的变量?

为什么不能在“ if”语句中的整数前加零

为什么从Powershell switch语句中的变量进行奇怪的赋值?

为什么允许在switch语句中声明变量?但不是声明+初始化?

为什么在for循环的初始语句中不能声明多个变量?

为什么不能在if语句中将会话变量保存在Flask中?

为什么我不能在WHERE语句中使用变量?

为什么我不能在一行语句中设置T-SQL CONTXT_INFO变量?

为什么我不能在IF语句中嵌套SUBSTITUTE?

为什么我在If语句中设置的变量不能在javascript中的if语句之外起作用?

在Switch语句中声明变量

为什么在switch语句中最终的Byte不能编译?

VS Code中的JavaScript:为什么不能在“ switch”语句中折叠“ case”代码块?

有什么情况我不能在switch语句中使用'continue'吗?

为什么我不能在for循环的第一条语句中包含2个变量

为什么我不能在if-then语句中更改变量的值?

为什么不能在 if 语句中使用空指针?

为什么我不能在类中放置 switch 语句

为什么我们不能在 switch 语句中使用关系表达式?

不能在 switch 语句之外使用声明的变量