性能函数调用与乘以 1

Performance function call vs multiplication by 1

看看这个函数:

float process(float in) {
  float out = in;

  for (int i = 0; i < 31; ++i) {
    if (biquads_[i]) {
      out = biquads_[i]->filter(out);
    }
  }

  return out;
}

biquads_std::optional<Biquad>[31].

在这种情况下,我检查每个可选项以检查它是否不为空,然后调用 biquad 的过滤函数,如果相反,我无条件地调用过滤函数,将其更改为乘以 1 或简单地 return输入值,会更有效率吗?

很可能它不会产生任何差异(虽然你的问题不完全清楚,但有点猜测)。出于两个原因:1) 除非代码将在 非常 热路径中使用,否则即使一种方式比另一种方式快几纳秒也没关系。 2)您的编译器优化器很可能足够聪明,可以生成在两种情况下执行接近(如果不相同)相同的代码。你测试了吗?你 benchmark/profile 了吗?如果不;这样做 - 启用 优化。

努力编写清晰、可读、可维护的代码。稍后当您确实遇到问题并且您的探查器将您的函数指向热点时,请担心微优化。