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

时间:2013-01-02 06:34:12

标签: c++ objective-c c if-statement switch-statement

  

可能重复:
  Advantage of switch over if-else statement
  Why the switch statement and not if-else?

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

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

为什么还要费心呢?

交换机中的break语句让我发疯,label:格式让我想起了goto。

这是针对objective-c,c,C ++的。我不确定vb.net是否有switch语句,但即使它确实如此,我必须忘记因为我从来没有使用它。

4 个答案:

答案 0 :(得分:10)

他们很可能编译成相同的代码。但意图不一定是提供更好的编译代码,而是提供更好的代码。

您可以whilefor循环播放ifgoto,但这不会使whilefor无效。你愿意拥有:

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

或:

    i = 0;
loop12:
    if (! (i < 10))
        goto skip12
    doSomethingWith (i);
    i++;
    goto loop12
skip12:

答案 1 :(得分:3)

if (color == WHITE)
{
}
else if (color == BLACK)
{
}
else if (color == GREY)
{
}
else if ((color == ORANGE) || (color == GREEN) || (color == BLUE))
{
}
else
{
}

VS

switch(color)
{
   case WHITE:
       break;
   case BLACK:
       break;
   case GREY:
       break;
   case ORANGE:
   case GREEN:
   case BLUE:
       break;
   default:
       break;
}

后者是否更具可读性并且需要更少的击键?

答案 2 :(得分:1)

开关的性能与if相同,否则在最坏的情况下是块。它可能会更好。之前已经讨论过这个问题:Advantage of switch over if-else statement

答案 3 :(得分:0)

优点:

Switch提供了一种比if

更好的编写程序的方法

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

缺点:

case只能有intchar个常量或一个表达式,可以评估其中一个!