这个问题非常简单:在我今年参加的实验课上,教授在经典switch/case
陈述的同时提出了if/then/else
陈述,但没有说明在不同的编程情况下哪一个更好。< / p>
在检查可能至少有10/15个可能值的变量时哪个更好?
答案 0 :(得分:9)
Breifly(你的问题很模糊),一个开关在汇编程序中编译成跳转表,因此比if / then / else更快。请注意,C中的switch语句具有“跟进”功能(google this),可以使用break语句来规避。
您只能打开评估为整数类型的内容。特别是这意味着您无法打开字符串:在任何情况下,字符串都不是自然C语言的一部分。
if / then / else连续检查几个条件。比较不限于整数类型,因为你所测试的只是真(非零)或假(零)。
这可能足以让你开始。
答案 1 :(得分:2)
当要比较的值具有适合switch
'd的类型,并且它使您的代码更具可读性时,请继续使用switch
。例如,
if (val == 0) {
// do something
} else if (val == 1) {
// do something else
} else if (val == 2) {
// yet another option
} ...
与switch
相比,更加混乱且难以维护。想象一下,有一天,你不想打开val
,而是打开validate(val)
;那么你需要改变所有的条件。
此外,switch
有时可能比if
/ else
更快,因为编译器可能会将其变为jump table或binary search。然后,编译器可能对一系列if
/ else
语句执行相同的操作,尽管这是一个更难以进行的优化,因为子句顺序可能很重要并且编译器必须能够检测到它没有。
答案 2 :(得分:2)
我想 如果那么只有当你有2个条件时才更好。 否则,如果条件超过2
,最好使用switch case答案 3 :(得分:1)
switch
看起来比很多if
更好。但是它只适用于数值表达式(因为char
本质上是一个数字,它仍然可以应用于它,但是你不能将它用于字符串)。
如果我可以指向here,因为它对switch
语句有很好的描述。请注意开头的句子:
Switch case语句可替代long if语句 将变量与几个“整数”值进行比较(“积分”值为 只是可以表示为整数的值,例如值 一个角色)。
答案 4 :(得分:1)
switch
在性能方面也更好,因为它可以由编译器以各种方式进行优化,具体取决于值是否连续。如果是,它可以直接使用该值作为指针数组的索引。如果没有,它有时可以使用二进制搜索而不是线性搜索,当它更快时。