我想了解更多关于“为什么不能在 switch 语句中声明变量? https://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement"
我读了这篇文章,但我不太明白。
您可以只在 switch 内声明变量,但声明并初始化变量或声明类的对象会给出编译时错误。
请给我解释一下......
本质上是因为如果未命中包含变量初始化的标签,则将跳过变量的初始化。这会很糟糕,因为当且仅当初始化代码运行时,编译器才必须发出会破坏所述变量的代码。
例如:
class A
{
// has some non-trivial constructor and destructor
};
switch (x)
{
case 1:
A a;
break;
default:
// do something else
}
如果代码击中了default
, then a
不会被初始化。编译器必须能够提前弄清楚这一点。可能出于性能原因,这是不允许的。
简单的解决方法是引入一个新的范围层:
class A
{
// has some non-trivial constructor and destructor
};
switch (x)
{
case 1:
{
A a;
}
break;
default:
// do something else
}
这使得它可以,破坏a
现在已明确定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)