有什么理由使用 switch 语句代替 if 和 elseif 的字符串
Is there any reason to use switch statement instead of strings of if and elseif?
可能的重复项:
切换 if-else 语句
的优势 为什么是 switch 语句而不是 if-else?
switch 语句似乎完全没用。它可以做的任何事情都可以通过if和else if链接来完成。
它们甚至可能编译为相同的代码。
那么为什么要费心呢?
switch 中的break
语句让我发疯,这种label:
格式让我想起了 goto。
这是针对 objective-c、c、C++。我不确定 vb.net 是否有switch语句,但即使有,我也必须忘记了,因为我从不使用它。
它们很可能编译为相同的代码。但目的不一定是提供更好的编译代码,而是提供更好的源代码。
您也可以使用 if
和 goto
进行while
或for
循环,但这不会使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
与while
相结合的goto
性。
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);
}
}
在最坏的情况下,开关的性能与 if 和 if 块相同。可能会更好。这在前面已经讨论过:切换if-else语句的优势
优点:
Switch
提供了比if
更好的程序编写方法
Switch
比if
工作得更快,因为在执行过程中编译器会生成跳转表来决定满足哪种情况,而不是检查满足哪种情况!
缺点:
case
只能有int
或char
常量或计算结果为其中之一的表达式!
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- if数组上的随机数
- 将按位if条件转换为普通if条件
- If语句在c++中被忽略
- 关于"if" "elseif" "else"陈述的良好做法是什么
- 减少 if-elseif 语句的聪明方法
- static const std::map<string, int> vs if-elseif
- 我写了一个if/elseif语句,但它只给了我第一个答案,为什么
- 有什么理由使用 switch 语句代替 if 和 elseif 的字符串