关于c ++:有没有理由使用switch语句而不是if和elseif的字符串?

Is there any reason to use switch statement instead of strings of if and elseif?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Advantage of switch over if-else statement
Why the switch statement and not if-else?

switch语句似乎完全无用。它可以做的任何事情都可以通过if和else if链接来完成。

它们甚至可能编译成相同的代码。

那么,为什么还要麻烦呢?

switch中的break语句让我发疯,label:格式让我想起goto。

这是ObjuleC,C,C++。我不确定vb.net是否有switch语句,但即使有,我也一定忘记了,因为我从未使用过它。


它们可以编译成相同的代码。但目的不一定是提供更好的编译代码,而是提供更好的源代码。

你也可以用ifgotowhilefor循环,但这并不能使whilefor无效。您是否愿意:

1
2
for (i = 0; i < 10; i++)
    doSomethingWith (i);

或:

1
2
3
4
5
6
7
8
    i = 0;
loop12:
    if (! (i < 10))
        goto skip12
    doSomethingWith (i);
    i++;
    goto loop12
skip12:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (color == WHITE)
{
}
else if (color == BLACK)
{
}
else if (color == GREY)
{
}
else if ((color == ORANGE) || (color == GREEN) || (color == BLUE))
{
}
else
{
}

VS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch(color)
{
   case WHITE:
       break;
   case BLACK:
       break;
   case GREY:
       break;
   case ORANGE:
   case GREEN:
   case BLUE:
       break;
   default:
       break;
}

后者是否更易读,需要更少的按键?


赞成的意见:

if相比,Switch提供了更好的程序编写方法。

Switch的工作速度比if快,因为在执行期间编译器生成跳转表来决定满足哪种情况,而不是检查满足哪种情况!

欺骗:

case只能有intchar常量或计算为这些常量之一的表达式!


在最坏的情况下,交换机的性能与if和else if块相同。可能会更好。这在前面已经讨论过:切换if else语句的优点