我知道它的基本概念是什么,但我在思考,并且我意识到,因此对于switch语句而言,它需要比一堆if语句更多的字符。
由于if
语句有7个字符(不包括变量名,也不包括它的比较,也没有代码),而switch语句有9个字符(同样的东西),因为这个词“break”,即使没有它,“case:”这个单词也是5个字符,而if语句则是7个字符,所以它并不比if
语句好多了!
答案 0 :(得分:16)
这样你就可以做像
这样的事情switch (toupper(ch))
{
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
bVowel = true;
break;
default:
bVowel = false;
break;
}
答案 1 :(得分:3)
我认为这是一种错误,因为进入下一个区块的能力令人困惑且容易出错。想要匹配多个选项的常见情况可以写得更好:
switch (expression) {
case 1, 7, 9:
do something;
case 2, 8, 10:
do something else;
}
这不是C ++的一个选项,因为该语言被设计为与C相对向后兼容。
答案 2 :(得分:3)
除字符数外还有许多重要因素:
答案 3 :(得分:1)
你有一个非常奇怪的方法来决定哪个是“更好”。一般来说,“更容易思考”是比“更短”更有用的测试。
最终,这就是C语言的设计者决定了提供可读性和易编译性的最佳组合的方式。
对于任何体面的优化编译器,最终生成的程序可能不会有太大差异。
答案 4 :(得分:1)
编译器可以提出各种不同的策略来生成switch语句的机器代码,即:
现在,编译器可能足够聪明,可以对一堆if
语句进行此类优化,但在设计语言时肯定不是这种情况,并且switch
语句放置所有信息都在那里供编译人员查看并决定生成什么代码。
答案 5 :(得分:0)
必须在运行时评估每个“if”语句。这可能取决于编译器优化。
根据我的理解,在评估每个案例的表达方面,切换语句更有效。
如果您不添加中断,则switch语句将继续关闭并可能执行更多案例。例如,默认语句。例如if / else
我更喜欢if / else if / else,因为如果忘记休息,他们就更难被捣乱。它们占用的空间较少,而且与其他程序员相比更常见。但是你可以让switch语句看起来很漂亮。
答案 6 :(得分:0)
对于switch语句,编译器可以例如制作案例值和goto地址的映射并进行优化查找,而不是仅仅通过所有“if”检查。
答案 7 :(得分:0)
像Duff's Device之类的东西可以起作用。
答案 8 :(得分:0)
C的设计易于编译。该语言的许多方面都非常糟糕,例如旧样式参数传递,已成功弃用。案例陈述的设计使得案例标签不必生成任何代码,但可以与“goto”标签类似地处理。如今,语言并不特别需要易于编译,但是如果不破坏批次代码就不可能改变'switch'语句的工作方式。