这个问题主要针对 C/C++,但我猜其他语言也有关系。
我不明白为什么仍然使用 switch/case 而不是 if/else if。在我看来,这很像使用 goto,并导致相同类型的困惑代码,而使用 if/else if 可以以更有条理的方式实现相同的结果。
不过,我还是经常看到这些街区。找到它们的常见位置是在消息循环(WndProc...)附近,而这些是它们引发最严重破坏的地方之一:变量在整个 block 中共享,即使不合适(并且不能在里面初始化)。必须特别注意不要放弃休息,等等......
就我个人而言,我避免使用它们,我想知道我是否遗漏了什么?
它们是否比 if/else 更有效? 它们是按照传统进行的吗?
最佳答案
总结我最初的帖子和评论 - switch
语句优于 if
/else
语句有几个优点:
更简洁的代码。具有多个链式
if
/else if ...
的代码看起来很凌乱且难以维护 -switch
提供更清晰的结构。性能。对于密集的
case
值,编译器生成跳转表,对于稀疏 - 二分查找或一系列if
/else
,所以在最坏的情况下switch
与if
/else
一样快,但通常更快。虽然有些编译器可以类似地优化if
/else
.测试顺序无关紧要。为了加快一系列
if
/else
测试,需要首先放置更多可能的案例。有了switch
/case
,程序员就不需要考虑这个了。默认值可以是任何地方。
if
/else
的默认大小写必须在最后 - 在最后一个else
之后。在switch
-default
可以在任何地方,只要程序员认为它更合适。通用代码。如果您需要在几种情况下执行通用代码,您可以省略
break
并且执行将“失败” - 这是您无法使用if
/else
。 (对于这种情况,放置一个特殊的注释/* FALLTHROUGH */
是一个很好的做法 - lint 识别它并且不会提示,如果没有这个注释它会提示,因为它是忘记的常见错误中断
)。
感谢所有评论者。
关于c++ - 为什么切换/Case 而不是 If/Else If?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1028437/