为什么要切换/删除而不是If / Else If?

这个问题主要针对C / C ++,但我想其他语言也很重要。

我不明白为什么仍然使用switch / case而不是if / else if。在我看来,这很像使用goto的方法,并且会产生相同的混乱代码,而if / else if可以以更有条理的方式实现相同的结果。

不过,我经常看到这些障碍。找到它们的常见地方是在消息循环(WndProc ...)附近,而这些地方却是它们引起最严重破坏的地方:变量在整个块中共享,即使不适当(也不能内部初始化)。必须特别注意不要掉线,等等。

就个人而言,我避免使用它们,并且我想知道我是否还缺少一些东西?

它们是否比if / else更有效率?它们是按照传统进行的吗?


智慧大石
浏览 399回答 3
3回答

不负相思意

好吧,原因之一就是清晰度。如果您有开关/盒,则表达式无法更改....即switch (foo[bar][baz]) {case 'a':    ...    break;case 'b':     ...    break;}而如果使用if / else,则如果您写错(或意图):if (foo[bar][baz] == 'a') {    ....}else if (foo[bar][baz+1] == 'b') {    ....}人们在阅读您的代码时会怀疑“ foo表达式应该是相同的”还是“为什么它们不同”?

至尊宝的传说

还请记住,switch语句允许控制流继续进行,这允许您很好地组合条件,同时允许您为某些条件添加其他代码,例如以下代码:switch (dayOfWeek){    case MONDAY:        garfieldUnhappy = true;    case TUESDAY:    case WEDNESDAY:    case THURSDAY:    case FRIDAY:       weekDay = true;       break;    case SATURDAY:       weekendJustStarted = true;    case SUNDAY:       weekendDay = true;       break;}if/else相反,在这里使用语句并不是那么好。if (dayOfWeek == MONDAY){    garfieldUnhappy = true;}if (dayOfWeek == SATURDAY){    weekendJustStarted = true;}if (dayOfWeek == MONDAY || dayOfWeek == TUESDAY || dayOfWeek == WEDNESDAY    || dayOfWeek == THURSDAY || dayOfWeek == FRIDAY){    weekDay = true;}else if (dayOfWeek == SATURDAY || dayOfWeek == SUNDAY){    weekendDay = true;}
打开App,查看更多内容
随时随地看视频慕课网APP