【发布时间】:2015-04-05 01:45:11
【问题描述】:
我可以总结一下,
- Switch case 由实现定义,但主要定义为跳转表
- 切换大小写使代码更具可读性
- 切换速度比
if/elseif(?) 快
考虑一个我有 300+ 个 switch 案例的案例。我知道这个场景中的if/elseif 会一团糟。
但我想知道switch 案例在
这样的场景?
- 它是否可扩展,即无论存在多少情况,它仍然比 if/else 相对快?
- 既然是执行 定义了我如何弄清楚我的编译器是如何实现它的?
- 最重要的是,除了实际编写代码和使用分析器之外,我该如何进行
if/elseif-switch比较?我尝试使用gcc 4.8.1-S开关编译一个带有switch case 的小型.c文件,它看起来像是创建了一个跳转表。我从这里去哪里? - 在这种情况下使用
if/elseif是更好还是更差
我主要对 C/C++ 的具体细节感兴趣
【问题讨论】:
-
无论如何,大多数现代编译器都会将一堆 if 优化到跳转表中,因此您不会注意到任何差异。也有人会争辩说,如果你必须在一个地方设置 300 个 if 条件,那么你的代码设计得很糟糕
-
@SingerOfTheFall 是的,我同意设计不当的部分。它是一个遗留代码,从它的用例来看,即运行时根据开关条件选择子类可能是最可行的
-
switch 的表现如何?测量它!是否可扩展?是的,最坏的情况就像 if/else 链。编译器如何实现开关?查看生成的汇编代码。它并不总是跳表。如果 case 标签中的值相距很远(例如 case 1、case 10000、case 90000),则 switch 将转换为 if/else 序列或 if/else 和跳转表的组合。 if/else 是否比 switch 更好?测量它。
-
如果你有 300+ 个 switch case,你需要的是重构。
-
@Suvarna 向社区提出的更有趣的问题是如何修复这个设计不当的代码,这样您就不需要 switch 或 if/elseif 链。我期待看到这个问题:)
标签: c++ c performance switch-statement