C++ 性能函数调用vs乘以1

C++ 性能函数调用vs乘以1,c++,performance,real-time,C++,Performance,Real Time,看看这个函数: float process(float in) { float out = in; for (int i = 0; i < 31; ++i) { if (biquads_[i]) { out = biquads_[i]->filter(out); } } return out; } 浮动过程(浮动入){ 向外浮动=向内浮动; 对于(int i=0;i滤波器(out); } } 返回; } biquads是一个std:

看看这个函数:

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

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

  return out;
}
浮动过程(浮动入){
向外浮动=向内浮动;
对于(int i=0;i<31;++i){
if(biquads_ui]){
out=biquads_ui]>滤波器(out);
}
}
返回;
}
biquads
是一个
std::可选[31]

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

很可能不会有任何差别(虽然有些猜测,因为你的问题并不完全清楚)。有两个原因:1)除非代码将在非常热的路径中使用,否则即使一种方法比另一种方法快几纳秒也无所谓。2) 您的编译器优化器很可能足够聪明,可以生成在这两种情况下执行接近(如果不完全相同的话)相同的代码。你测试过了吗?你对它进行了基准测试/评测了吗?若否,;这样做-启用优化


努力编写清晰、可读、可维护的代码。当您实际遇到问题且分析器将您的函数作为热点时,请稍后再考虑微优化。

您能否详细说明,如果我改为无条件调用filter函数,将其更改为乘以1或仅返回输入值,效率会更高?还有吗?我没有任何数据支持,但我想说性能会非常相似,您现在的操作方式比另一种更清晰。您可以通过显示编译器为这两种情况生成的汇编语言来更好地了解性能。如果*不包含值,则行为是未定义的。其中*指的是
可选对象。因此,您不能无条件地调用
filter
函数。无条件调用filter函数的意思是更改为双四元数组,而不是数组可选。然后在过程函数中删除if(biquads_ui])。