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

Initializing variables (int32) inside switch statement

本文关键字:int32 变量 初始化 switch 语句      更新时间:2023-10-16

我有一个代码块,我正在尝试将其从PHP转换为C++,编译器在我的switch语句上挂断了。

我有一些类似的东西:

switch(//Some int)
{
    case 1:
    default:
        int32 x = 1;
        doSomething(x);
        break;
    case 2:
        doSomething(3);
        break;
}

这是抛出错误:

错误 C2360:"案例"标签跳过"x"的初始化


我似乎可以通过声明和初始化 switch 语句之外的变量来解决此问题,但这是为什么呢?在 switch 语句的作用域中创建临时变量有什么问题?


只是

为了进一步澄清,我只是试图在那个调用doSomething(x)中使用x。我不尝试在 switch 语句的范围之外使用它。

尝试添加{}

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标签被认为是这方面的跳跃。