看看这个功能:
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或者只是返回输入值,将是效率更高?
答案 0 :(得分:2)
很可能它不会产生差异(虽然你的问题并不完全清楚,但有点猜测)。有两个原因:1)除非代码将在 very 热路径中使用,否则即使一种方式比另一种方式快几纳秒也无关紧要。 2)很可能你的编译器优化器将足够聪明,以生成在两种情况下都执行接近(如果不相同)的代码。你测试过吗?你有基准/描述它吗?如果不;这样做 - 启用优化。
努力编写清晰,可读,可维护的代码。当您实际遇到问题并且您的探查器将您的功能指向热点时,请担心微优化。