C++ 不必要的else语句:如果可以使用just-IF,那么使用else有什么缺点吗?

C++ 不必要的else语句:如果可以使用just-IF,那么使用else有什么缺点吗?,c++,c,optimization,C++,C,Optimization,考虑以下示例的速度(请忽略此示例完全荒谬): 对 int multiply(int a, int b) { if (a == 0 || b == 0) { return 0; } else if (a == b) { return pow(a, 2); } else { return a*b; } } 显然,这里并没有必要这样做,但是当我处理复杂的操作时,我发现当格式化为后者时,阅读起来要容易得多。在第二个配置中运行是否需要更长的时间?我会牺牲什么吗?编

考虑以下示例的速度(请忽略此示例完全荒谬):

int multiply(int a, int b) {
  if (a == 0 || b == 0) {
    return 0;
  } else if (a == b) {
    return pow(a, 2);
  } else {
    return a*b;
  }
}

显然,这里并没有必要这样做,但是当我处理复杂的操作时,我发现当格式化为后者时,阅读起来要容易得多。在第二个配置中运行是否需要更长的时间?我会牺牲什么吗?

编辑:首先回答客户的OP问题,然后讨论一般情况

针对您的问题回答:在您的情况下,由于您有返回,在每种情况下,它都将脱离流量控制。在一般情况下,在必要时将它们链接起来会更好

一般回答:是的,基本上当您只使用if时,您的程序检查所有条件,即使其中一个条件得到满足


当执行if,else if,else的链时,一旦满足其中一个条件,该链中的所有其他条件都将被忽略。

在这种特殊情况下,我所知道的任何编译器都不会失败 为两者生成完全相同的输出。然而,总的来说 案例:

  • 为可读性和可维护性而编写
  • 剖面
  • 仅在发现瓶颈的地方进行优化
  • 使用更多分析测试您的优化
  • 第四部分很重要,硬件有很多惊人之处 优化是内置的,这完全不是直观的
    快点

    您必须分析代码。编译器很可能理解您在做什么,并以任何一种方式生成相同的汇编代码。从概念上讲,
    如果
    按顺序计算,
    如果
    仅当前面的值为
    false时,
    如果
    。。。。。也许编译器足够聪明,可以调整您的代码。您必须查看编译器生成的代码才能确定(但如果生成的代码不同,我至少会有点惊讶)@WhozCraig:但是如果改用gcc 6.3编译,会有一点不同——一个版本会有一个额外的跳转——它被编译为
    jmp,而另一个版本则是
    。(是的,我意识到只有当两个文件都在同一个文件中时才会发生这种情况,所以这是不相关的——但它确实显示了编译器能够识别出这些文件本质上是相同的程度)。不是基于观点的。这个问题有一个真实的答案。在OPs代码中,如果条件为真,就有返回。关于返回,您是对的,但在一般情况下,如果没有返回,它就是这样工作的。我认为这一点很重要。首先回答一般情况可能会产生误导。最好先回答OP的问题,然后对一般情况进行扩展。你是对的,我将对其进行编辑。虽然这篇文章讨论了问题中的代码,但它似乎没有解决实际问题本身。我看不出有任何理由认为OP对控制流感到困惑或不确定——至少,整个问题围绕着他明确的认识,即他对代码的两个变体具有相同的结果。
    int multiply(int a, int b) {
      if (a == 0 || b == 0) {
        return 0;
      } else if (a == b) {
        return pow(a, 2);
      } else {
        return a*b;
      }
    }