2015-04-25 31 views
0

我有一个代码块,我试图从PHP转换为C++,编译器挂在我的switch语句上。初始化switch语句中的变量(int32)

我沿着线的东西:

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

这是引发错误:

错误C2360: 'x' 的初始化是由 '案例' 标签跳过


我似乎能够通过声明和初始化外部变量来解决这个问题switch语句,但为什么呢?在switch语句的范围内创建临时变量有什么问题?


只是为了进一步澄清,我只是试图在一个呼叫使用xdoSomething(x)。我不试图在switch语句的作用域之外使用它。

回答

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

+0

啊我明白了。这不是PHP的限制,所以我从来没有遇到过这个。谢谢 :) – David