-2

可能重复:
切换 if-else 语句的优势
为什么使用 switch 语句而不是 if-else?

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

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

那么,为什么要打扰它呢?

breakswitch 中的语句让我发疯,这种label:格式让我想起了 goto。

这适用于objective-c、c、C++。我不确定 vb.net 是否有 switch 语句,但即使有,我也一定忘记了,因为我从不使用它。

4

4 回答 4

10

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

您也可以使用and进行whilefor循环,但这并没有什么用处。你宁愿有:ifgotowhilefor

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

或者:

    i = 0;
loop12:
    if (! (i < 10))
        goto skip12
    doSomethingWith (i);
    i++;
    goto loop12
skip12:
于 2013-01-02T06:37:48.250 回答
3
if (color == WHITE)
{
}
else if (color == BLACK)
{
}
else if (color == GREY)
{
}
else if ((color == ORANGE) || (color == GREEN) || (color == BLUE))
{
}
else
{
}

对比

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

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


除了可读性之外,还有另一个独特的 switch-case 用途:Duff's Device。该技术利用了gotoswitch-case耦合的特性while

void dsend(char* to, char* from, count) {
  int n = (count + 7) / 8;
  switch (count % 8) {
  case 0: do {
      *to = *from++;
      case 7: *to = *from++;
      case 6: *to = *from++;
      case 5: *to = *from++;
      case 4: *to = *from++;
      case 3: *to = *from++;
      case 2: *to = *from++;
      case 1: *to = *from++;
    } while (--n > 0);
  }
}
于 2013-01-02T06:41:02.947 回答
1

switch 的性能与最坏情况下的 if 和 else if 块相同。它可能会更好。这个之前已经讨论过:切换if-else语句的优势

于 2013-01-02T06:39:49.907 回答
0

优点:

Switch提供了一种比if

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

缺点:

case只能有intorchar常量或计算结果为其中之一的表达式!

于 2013-01-02T06:41:18.643 回答