【问题标题】:Nested if or switch case statement嵌套 if 或 switch case 语句
【发布时间】:2011-06-02 07:32:37
【问题描述】:

从优化代码运行时间的角度来看,在哪里使用“嵌套if”语句以及何时使用“switch case”语句是否有经验法则?

【问题讨论】:

  • Switch 通常是 if/elseif/elseif 类型的模式的替代品,而不是嵌套的 if - 这就是你的意思吗?
  • 正如tofutim所说,选择最容易阅读的,因为没有优化差异。太多的嵌套语句只会让阅读变得混乱。

标签: c case nested-if


【解决方案1】:

我怀疑你是否会找到一个真实的应用程序,其中嵌套 if 和 switch case 之间的差异甚至值得衡量。磁盘访问、Web 访问等需要多很多数量级的时间。

选择最容易阅读和调试的内容。

另见What is the difference between IF-ELSE and SWITCH?(可能重复)以及Advantage of switch over if-else statement。有趣的是,switch 的支持者写道

在最坏的情况下,编译器会 生成与 if-else 相同的代码 链,所以你不会丢失任何东西。如果 怀疑把最常见的情况 首先进入switch语句。

在最好的情况下,优化器可以 找到更好的方法来生成 代码。编译器做的常见事情是 构建二叉决策树 (保存比较和跳转 平均情况)或简单地构建一个 跳转表(在没有比较的情况下工作 全部)。

【讨论】:

  • 只要程序的语义允许,编译器可以像处理 switch 一样处理 if/else 链。无法确定编译器不够聪明,不会引起对 Skynet 的担忧。如果您必须关心,那么 a) 测量和 b) 检查您关心的特定编译器的输出。一般的答案是 tofutim siad:“选择最容易阅读和调试的内容。”。
【解决方案2】:

如果您有超过 2-3 次比较 然后“切换” 否则“如果”

在切换策略之前尝试应用一些模式...

【讨论】:

    【解决方案3】:

    我认为这对于可以使用任何一种方法实施的决策结构都不会产生任何影响。您的编译器很可能会在可执行文件中生成相同的指令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      相关资源
      最近更新 更多