if/else 在什么阶段变得比 switch case 更好?可以?

2023-12-29

根据我所读到的内容,我可以总结一下,

  • Switch case 是实现定义的,但主要定义为跳转表
  • 切换大小写使代码更具可读性
  • 切换速度比if/elseif (?)

考虑一个例子,我有300+切换案例。我知道一个if/elseif这场面将会是一片混乱。

但我想知道如何switch案例执行于 这样的场景?

  • Is it scalable即,无论存在多少个案例,它仍然比 if/else 相对更快?
  • 既然是实施 定义了我怎样才能弄清楚我的编译器是如何实现它的?
  • 最重要的是我该怎么做if/elseif - switch除了实际编写代码和使用分析器之外的比较?我尝试过编译一个小.c带有 switch case 的文件使用gcc 4.8.1 -S切换,看起来好像创建了一个跳转表。我该去哪里?
  • 使用更好/更差if/elseif在这种情况下

我主要对 C/C++ 的具体细节感兴趣


编译器可能会决定使用跳转表并在 300+ 的情况下做出巨大的改进。

编译器确实使用决策树等各种技术对分支进行优化。

编译器越容易理解代码就越好。而且 switch 语句对于编译器来说也更具可读性。

从编译器的角度考虑 else if。它看起来像一个箭头:

    - if 
     - else
      - else 
       - else
        - else

您需要评估前面的每个 if 才能得到正确的 else 。

然而 Switch 看起来更像是一个块:

     - case
     - case
     - case
     - case

所以编译器有时可以直接决定去哪里。

对于您的项目符号问题:

  1. 它是可扩展的。开发人员很容易编写,如果编译器使用跳转表,添加更多情况也不会产生影响。

  2. 由编译器决定使用什么。它可能选择根本不优化它(但很可能是跳转表)。

  3. 您可以运行一个循环并手动测量时间吗?

  4. 使用 switch 总是更好。在最坏的情况下,开关将充当 if/else 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

if/else 在什么阶段变得比 switch case 更好?可以? 的相关文章

随机推荐