C++:switchcase中的初始化并不总是给出错误

我读到 switch 情况下的初始化应该给出编译器错误。但是当我尝试了两个不同的版本时。一个是没有给出错误(Ex1),我不明白为什么。

例 1:

switch (i)
{
case 1:
    int k;
    break;
case 2:
    int j=3;
    break;
}

例2:

switch (i)
{
case 1:
    int k=3;
    break;
case 2:
    int j;
    break;
}

回答

在 switch 块中,在 a 之前的每个声明都case可以在那个case. 当有出现的错误case,以使switch能跳位于一个变量,你可以访问那里的初始化之后。如果case跳转到,您可以使用该变量,尽管它从未发生过初始化。

在第一个示例中,没有case哪个会跳过初始化。唯一的初始化是int j=3;在每个之后出现,case因此不能跳过。k未初始化,因此不能跳过其初始化。

在第二个例子中,if i == 2thenk的初始化将被跳过。

一种解决方案是为每个案例定义一个范围。然后,为 a 定义的变量case只能从中访问,case并且不会发生问题。例如 :

void foo(int i)
{
    switch (i)
    {
    case 1:
    {
        int k=3;
        break;
    }
    case 2:
    {
        // k is not accessible here
        int j;
        break;
    }
    }
}


以上是C++:switchcase中的初始化并不总是给出错误的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>