switch 语句似乎完全没用。它可以做的任何事情都可以通过 if 和 else if 链接来完成。
他们甚至可能编译成相同的代码。
那么,为什么要打扰它呢?
break
switch 中的语句让我发疯,这种label:
格式让我想起了 goto。
这适用于objective-c、c、C++。我不确定 vb.net 是否有 switch 语句,但即使有,我也一定忘记了,因为我从不使用它。
switch 语句似乎完全没用。它可以做的任何事情都可以通过 if 和 else if 链接来完成。
他们甚至可能编译成相同的代码。
那么,为什么要打扰它呢?
break
switch 中的语句让我发疯,这种label:
格式让我想起了 goto。
这适用于objective-c、c、C++。我不确定 vb.net 是否有 switch 语句,但即使有,我也一定忘记了,因为我从不使用它。
它们很可能编译成相同的代码。但其目的不一定是提供更好的编译代码,而是提供更好的源代码。
您也可以使用and进行while
或for
循环,但这并没有什么用处。你宁愿有:if
goto
while
for
for (i = 0; i < 10; i++)
doSomethingWith (i);
或者:
i = 0;
loop12:
if (! (i < 10))
goto skip12
doSomethingWith (i);
i++;
goto loop12
skip12:
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。该技术利用了goto
与switch-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);
}
}
switch 的性能与最坏情况下的 if 和 else if 块相同。它可能会更好。这个之前已经讨论过:切换if-else语句的优势
优点:
Switch
提供了一种比if
Switch
工作速度比if
因为在执行期间编译器生成跳转表来决定满足哪种情况而不是检查满足哪种情况!
缺点:
case
只能有int
orchar
常量或计算结果为其中之一的表达式!