2

问题其实很简单:今年我参加的一个实验课上,教授把这switch/case句话和经典放在一起if/then/else语句旁边展示了这个语句,而没有说在不同的编程情况下哪个更好。

检查至少有 10/15 个可能值的变量时,哪个更好?

4

5 回答 5

9

Breifly(您的问题含糊不清),开关在汇编程序中编译为跳转表,因此比 if / then / else 更快。请注意,C 中的 switch 语句具有“跟进”功能(google this),可以使用 break 语句来规避。

您只能打开评估为整数类型的东西。特别是这意味着您不能打开字符串:无论如何,字符串都不是自然 C 语言的一部分。

if / then / else 连续检查几个条件。比较不限于整数类型,因为您要测试的所有内容都是真(非零)或假(零)。

这可能足以让你开始。

于 2013-05-30T09:54:42.547 回答
2

我认为 If then else 只有当你只有两个条件时才会更好。否则,如果条件超过 2,最好使用 switch case

于 2013-05-30T09:54:47.753 回答
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有时更快,因为编译器可能会将其转换为跳转表二分查找。再一次,编译器可能会对一系列if/else语句执行相同的操作,尽管这是一个更难进行的优化,因为子句顺序可能很重要,并且编译器必须能够检测到它不重要。

于 2013-05-30T09:53:34.323 回答
1

switch看起来比很多ifs好。但是它只适用于数字表达式(因为 achar本质上是一个数字,它仍然可以应用于它,但是你不能将它与字符串一起使用)。

如果我可以指出你在这里,因为它对switch声明有很好的描述。注意开场白:

switch case 语句替代了 long if 语句,该语句将变量与多个“整数”值进行比较(“整数”值只是可以表示为整数的值,例如 char 的值)。

于 2013-05-30T09:55:11.270 回答
1

switch在性能方面也更好,因为它可以由编译器以各种方式优化,具体取决于值是否连续。如果是,它可以直接使用该值作为指针数组的索引。如果没有,它有时可以使用二进制搜索而不是线性搜索,因为它更快。

于 2013-05-30T09:56:10.797 回答