gpt4 book ai didi

C++:switch case 内的初始化并不总是给出错误

转载 作者:行者123 更新时间:2023-12-02 02:07:21 27 4
gpt4 key购买 nike

我读到 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 block 中,case 之前的每个声明都可以在该 case 处使用。当存在 case 时,switch 可以跳转到该 case,而该 case 位于您可以访问的变量初始化之后。如果跳转到该 case,您可以使用该变量,尽管它的初始化从未发生。

在第一个示例中,不存在会跳过初始化的情况。唯一的初始化是 int j=3;,它出现在每个 case 之后,因此无法跳过。 k 未初始化,因此无法跳过其初始化。

在第二个示例中,如果i == 2,则将跳过k的初始化。

一种解决方案是为每种情况定义一个范围。然后,为 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++:switch case 内的初始化并不总是给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68232668/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com