0

在开关的特定情况下初始化变量是不好的做法吗?

我有很多变量只与我的一个案例相关,并且似乎找不到任何关于此的信息。

谢谢 :)

4

3 回答 3

4

为什么不只在它们相关的情况下声明它们?

switch (something)
{
case 1:
    do_something();
    break;

case 2:
  {
    int x = 12;
    do_something_else(x);
    break;
  }
}

case 2:不要错过用于创建子范围的花括号。因此,变量 x 是本地的case 2

于 2013-05-13T15:36:14.143 回答
2

一般来说,我会说如果你的一个案例足够复杂以至于它需要它自己的变量而没有在其他地方使用,它可能实际上应该成为它自己的函数。

于 2013-05-13T15:38:31.760 回答
-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,这很好。

除了这一部分,在特定情况下使用局部变量并没有错。事实上,我会说这是一件好事 [但也许更好的是编写一个小函数!]

于 2013-05-13T15:44:19.290 回答