我们有一个代码库,开发人员在其中实现了以下条件分配。本质上,所有四个条件 ( condition2
) 检查相同的事情(例如i==j
),并编写如下
....
else if (condition1){
a = condition2 ? m : 0;
b = condition2 ? 0 : m;
c = condition2 ? n : 0;
d = condition2 ? 0 : n;
虽然这看起来很紧凑(并且更具可读性?对此不确定),但我认为将它们放入 if else 语句中,因为这样可以节省 4 次相同的 if 检查并提高性能。现有的方法是否可取,或者重写为单个 if else 是否可取?
一般来说,编译器会找出最适合执行的内容。作为一名程序员,您应该关注可读性。
例如,使用 -O3 优化的代码将导致
condition2
仅被评估一次。请参阅此处: https: //godbolt.org/z/4fs8efjoa如果您的目标是微观优化,理论上您可以通过像这样重写代码来完全避免分支:
它在 上没有分支
condition2
,但更难理解。请参阅此处: https: //godbolt.org/z/ojrP9rf5s。(注意:乘法指令很昂贵,但比分支错误预测便宜。)更新:
令人惊讶的是,@Red.Wave 在评论中发布的代码:
使用 -O3 优化产生与原始代码相同的汇编输出。请参阅此处: https: //godbolt.org/z/YMMbYPbrj
更新:
为了完整起见,由于
a
<->b
和c
<->d
是互补的,您也可以这样做:请参阅此处: https: //godbolt.org/z/Khr8zfKMq