作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读到 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/
我是一名优秀的程序员,十分优秀!