在交换机的特定情况下初始化变量是不好的做法吗?
我有很多变量只与我的一个案例相关,似乎无法找到任何相关信息。
谢谢:)
答案 0 :(得分:4)
为什么不在相关的情况下声明它们?
switch (something)
{
case 1:
do_something();
break;
case 2:
{
int x = 12;
do_something_else(x);
break;
}
}
不要错过case 2:
中用于创建子范围的花括号。因此,变量x是case 2
答案 1 :(得分:2)
一般来说,我会说如果你的一个案例足够复杂,它需要它自己的变量而不是在其他地方使用,它实际上应该成为它自己的功能。 / p>
答案 2 :(得分:-1)
如果你有这样的事情:
class X { X() {...} /* and other stuff */ };
switch(a)
{
case 1:
X x;
... using x here ..
break;
case 2:
...
break;
....
}
然后x
将在switch
大括号的末尾被销毁。这不是一个好主意,因为对于1以外的情况,它不会被初始化。 [此示例将无法编译,因为编译器检测到这种情况会发生,并给出错误!]
所以用大括号包装它:
case 1:
{
X x;
... using x here ..
}
break;
case 2:
...
break;
....
现在X在break
之前被销毁,这很好。
除了这部分,在特定情况下拥有局部变量没有任何问题。事实上,我认为这是一件好事[但也许更好的是写一个小函数!]