我有一个代码块,我试图从PHP转换为C ++,并且编译器在我的switch语句中被挂起。
我有以下几点:
switch(//Some int)
{
case 1:
default:
int32 x = 1;
doSomething(x);
break;
case 2:
doSomething(3);
break;
}
这就是错误:
错误C2360:初始化' x'被' case'跳过标签
我似乎能够通过声明和初始化switch语句之外的变量来解决这个问题,但为什么会这样呢?在switch语句的范围内创建临时变量的问题是什么?
为了进一步澄清,我只是在x
的一次调用中尝试使用doSomething(x)
。我不会尝试在switch语句的范围之外使用它。
答案 0 :(得分:1)
尝试添加{}
:
default:
{
int32 x = 1;
doSomething(x);
break;
}
根据标准:
可以转换为块,但不能以初始化绕过声明的方式。一个 从具有自动存储持续时间的变量不在范围内的点跳过
91
的程序 它在范围内的点是不正确的,除非......
void f() {
// ...
goto lx; // ill-formed: jump into scope of a
// ...
ly:
X a = 1;
// ...
lx:
goto ly; // OK, jump implies destructor
// call for a followed by construction
// again immediately following label ly
}
91)
从switch
语句的条件转移到case
标签在这方面被视为跳跃。