在switch语句中初始化变量(int32)

时间:2015-04-25 22:20:52

标签: c++ initialization switch-statement

我有一个代码块,我试图从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语句的范围之外使用它。

1 个答案:

答案 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标签在这方面被视为跳跃。