我们有一个代码库,其中一个dev实现了以下条件赋值。
....
else if (condition1){
a = condition2 ? m : 0;
b = condition2 ? 0 : m;
c = condition2 ? n : 0;
d = condition2 ? 0 : n;
字符串
虽然这看起来很紧凑(更易读?不确定),我认为,使他们成为一个if else语句,因为这将保存做同样的if检查4次,并提高性能.是现有的方法可取或重写为一个单一的if else可取?
1条答案
按热度按时间dz6r00yl1#
一般来说,编译器会找出什么是最好的执行。作为一个程序员,你应该关注可读性。
例如,使用-O3优化的代码将导致
condition2
仅被计算一次。如果你的目标是微优化,理论上你可以通过重写代码来避免分支:
字符串
它在
condition2
上没有分支,但更难理解。参见这里:https://godbolt.org/z/ojrP9rf5s。(注意:乘法指令是昂贵的,但比分支错误预测便宜。)更新:
令人意外的是,@Red.Wave在评论中发布的代码:
型
使用-O3优化后,会产生与原始代码相同的汇编输出。参见此处:https://godbolt.org/z/YMMbYPbrj
更新:
为了完整起见,由于
a
<->b
和c
<->d
是互补的,你也可以这样做:型
标签:https://godbolt.org/z/Khr8zfKMq