问题其实很简单:今年我参加的一个实验课上,教授把这switch/case
句话和经典放在一起if/then/else
语句旁边展示了这个语句,而没有说在不同的编程情况下哪个更好。
检查至少有 10/15 个可能值的变量时,哪个更好?
问题其实很简单:今年我参加的一个实验课上,教授把这switch/case
句话和经典放在一起if/then/else
语句旁边展示了这个语句,而没有说在不同的编程情况下哪个更好。
检查至少有 10/15 个可能值的变量时,哪个更好?
Breifly(您的问题含糊不清),开关在汇编程序中编译为跳转表,因此比 if / then / else 更快。请注意,C 中的 switch 语句具有“跟进”功能(google this),可以使用 break 语句来规避。
您只能打开评估为整数类型的东西。特别是这意味着您不能打开字符串:无论如何,字符串都不是自然 C 语言的一部分。
if / then / else 连续检查几个条件。比较不限于整数类型,因为您要测试的所有内容都是真(非零)或假(零)。
这可能足以让你开始。
我认为 If then else 只有当你只有两个条件时才会更好。否则,如果条件超过 2,最好使用 switch case
当要比较的值具有适合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
有时更快,因为编译器可能会将其转换为跳转表或二分查找。再一次,编译器可能会对一系列if
/else
语句执行相同的操作,尽管这是一个更难进行的优化,因为子句顺序可能很重要,并且编译器必须能够检测到它不重要。
switch
看起来比很多if
s好。但是它只适用于数字表达式(因为 achar
本质上是一个数字,它仍然可以应用于它,但是你不能将它与字符串一起使用)。
如果我可以指出你在这里,因为它对switch
声明有很好的描述。注意开场白:
switch case 语句替代了 long if 语句,该语句将变量与多个“整数”值进行比较(“整数”值只是可以表示为整数的值,例如 char 的值)。
switch
在性能方面也更好,因为它可以由编译器以各种方式优化,具体取决于值是否连续。如果是,它可以直接使用该值作为指针数组的索引。如果没有,它有时可以使用二进制搜索而不是线性搜索,因为它更快。