57
|
Aran Mulholland JohnnyAce · 技术社区 · 15 年前 |
![]() |
1
80
似乎编译器在优化switch语句方面优于if语句。 编译器不知道计算if语句的顺序对您是否重要,并且无法在那里执行任何优化。您可以在if语句中调用方法,从而影响变量。使用switch语句,它知道所有子句都可以同时进行计算,并且可以将它们按最有效的顺序放置。
下面是一个小的比较:
|
![]() |
2
9
调试器使其更简单,因为您不想单步执行编译器创建的实际代码。 如果开关包含五个以上的项,则使用查找表或哈希表实现,否则使用if..else实现。 看到密切相关的问题 is âelse ifâ faster than âswitch() caseâ ? . 当然,除了C语言以外的其他语言或多或少也会实现它,但是切换通常更有效。 |
![]() |
3
6
许多编程语言都对switch语句进行了优化,因此如果结构提供的情况是编译器常量,那么它比标准if else快得多。许多语言使用跳转表或索引 branch table 优化switch语句。 Wikipedia 对switch语句进行了很好的讨论。也, here 讨论了C语言中的开关优化问题。 需要注意的一点是,switch语句可能会被滥用,根据具体情况,最好使用多态性而不是switch语句。见 here 举个例子。 |
![]() |
4
0
我相信,因为cases必须是常量值,switch语句实现goto的相等性,因此基于变量的值,它跳到正确的case,而在if/then语句中,它必须计算每个表达式。 |
![]() |
5
0
它可以对case语句执行此操作,因为值是编译器常量。这里有更详细的解释 http://sequence-points.blogspot.com/2007/10/why-is-switch-statement-faster-than-if.html |
![]() |
6
0
我认为这只是使它简单化的调试器。 请注意,案例和“if list”最终是不同的。有理由阻止 正常地 以“break”结尾。案例stmt在组装中分解时实际上看起来像这样。
如果你没有休息,那么箱子块会丢失“goto end”stmts,事实上,如果你落在“car”箱子里,你实际上会运行这两个部分。
|
![]() |
7
0
维基百科 Switch statement entry 相当大,实际上相当好。有趣的地方:
有关使用C开关进行的奇怪而有趣的优化,请参见 Duff's Device . |
![]() |
Sweepy Dodo · JSON lite的格式化 8 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 9 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 10 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 1 年前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 1 年前 |