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

标签 c++ switch-statement

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

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

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

initialization of 'newVal' is skipped by 'case' label

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

最佳答案

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

处理此问题的正确方法是定义特定于该 case 语句的范围并在其中定义您的变量:

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

关于c++ - 为什么不能在 switch 语句中声明变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/92396/

相关文章:

c++ - 如何在C++中将字符串转换为日期?

Java 代码不等待扫描仪输入

java - Java 通常需要多少程序员 "assist"才能切换到 JIT 到调度表?

c++ - 使用 std::for_each lambda 函数时出错

c++ - 显式调用时,析构函数被调用两次

c - 标签不会减少为整数常量

c - 在 switch 语句中初始化变量

c++ - 开关语句(字符串)继续选择默认值,除非它为零

c++ - Vulkan 中动态统一缓冲区的缓冲区内存分配

c++ - 在输出窗口中显示三个图像而不是一个