为什么这个代码片段运行良好
void foo(int i)
{
switch(i) {
case 1:
{
X x1;
break;
}
case 2:
X x2;
break;
}
}
而下面给出了编译错误('x1'的初始化被'case'标签跳过)?
void foo(int i)
{
switch(i) {
case 1:
X x1;
break;
case 2:
X x2;
break;
}
}
我知道使用大括号会引入一个新的范围,因此在我们点击它的左大括号之前不会为 x1 分配存储空间。但是 x2 仍然在不带括号的情况下在标签内初始化。这也不应该是一个错误吗?
我认为在两个代码片段中都可以有条件地跳过 x2 的初始化