我无法理解为什么我们需要使用切换语句而不是嵌套if 语句检查条件时有任何速度
答案 0 :(得分:2)
switch语句可以更容易阅读,这对于维护原因很重要。 此外,编译器可能能够使用switch语句进行更好的优化,尽管编译器现在变得非常好,所以可能没有。
另一方面,在switch / case不能的情况下,可以使用多个if语句(嵌套或只是级联else-if)。例如。比较字符串。
答案 1 :(得分:0)
正如约翰所说,开关具有指定的用途。它的功能受到限制,但在这些限制内,它通常更容易理解,并且不易发生程序员错误,因为程序员仅限于交换机的功能。因此,当满足要求时,通常首选开关。请注意,开关仅限于要与之比较的一个项目。
机器效率不太可能是一个考虑因素,但开发人员的效率可能很高。在开发由他人维护的软件时,软件的所有者可能需要使用有助于提高开发人员效率的约定。
答案 2 :(得分:-1)
如果仔细查看switch
控制流程背后的文档,您会看到您正在切换的每个案例都以break
结尾。这意味着当满足该开关盒的条件时,代码块停止执行。
if
语句,所以是的,速度是它背后的一个重要原因。我上面提到的任何内容都不是特定于C或任何语言的。
switch(n) {
case 0:
printf("You typed zero.\n");
break;
case 1:
case 9:
printf("n is a perfect square\n");
break;
case 2:
printf("n is an even number\n");
break;
case 3:
case 5:
case 7:
printf("n is a prime number\n");
break;
case 4:
printf("n is a perfect square\n");
case 6:
case 8:
printf("n is an even number\n");
break;
default:
printf("Only single-digit numbers are allowed\n");
break;
}
上面的代码说明了参数' n' ,块将打印"您输入零"如果n为0(然后停止),则打印" n是一个完美的正方形"如果n是1或9(然后停止),依此类推。这与其if
控制流对应物不同,因为在if
的情况下,将在退出代码块之前针对每个条件检查参数。
您可以通过插入“中断”来完成if
语句的类似功能。在每个if
之后。当您希望将参数与单个条件匹配然后退出时,通常会调用switch
控制流,而不是针对每个条件检查参数。