Jam*_*ley 0 c++ performance equation if-statement
在处理布尔值时,使用if语句或方程通常会更好吗?请解决以下问题,请记住,您的答案应适用于大多数(如果不是全部)代码:
(我指的是C++,但由于这个问题是半通用的,因此也可以参考或与其他语言进行比较.)
鉴于以下广泛的情况,
int n = (anything);
bool x_not_y = (declared as random boolean value);
Run Code Online (Sandbox Code Playgroud)
目标是使int x = nif x_not_y成立,int y = n而恰恰相反,使用if/else语句更好:
if (x_not_y)
x = 5;
else
y = 5;
Run Code Online (Sandbox Code Playgroud)
(以下简称)
x_not_y?x = 5:y = 5;
Run Code Online (Sandbox Code Playgroud)
或者使用方程式?
x = (x * (int)!x_not_y) + (5 * (int)x_not_y);
y = (y * (int)x_not_y) + (5 * (int)!x_not_y);
Run Code Online (Sandbox Code Playgroud)
哪个更快,为什么?或者差异是否太小而不显着?
我怀疑这样的代码会对现代优化器产生影响,但如果你想知道,我们首先要问,什么平台,什么编译器?,然后我们需要衡量.
其中一个更有活力吗?在某些情况下,他们中的一个可能会与另一个相遇吗?
因为我碰巧相信你的编译器的优化器可以平等地处理所有这些,我建议编写易于理解和维护的代码,并且只有在测量显示这是一个热点之后才能处理优化.
哪个是更好/首选的代码,还是完全基于意见的做法?
随着时间的推移,我发现我越来越倾向于功能范式.我喜欢通过代码的结构更好地表达分支,而不是通过变量值,我更愿意尽可能多地表达(甚至是语言环境变量).
我特别学会不喜欢这样的代码:
int x;
if( some_condition )
x = 5;
else
x = 42;
Run Code Online (Sandbox Code Playgroud)
为了理解这样的代码,必须跟踪每个变量的值并遵循每个语句.另外,x不能在const这里,我认为这是一个字符串的缺点.
我更喜欢
const int x = calc_x(some_condition);
Run Code Online (Sandbox Code Playgroud)
在这个例子中,这个例子很简单,可以写成
const int x = some_condition ? 5 : 42;
Run Code Online (Sandbox Code Playgroud)
现在x可以const(允许编译器阻止我无意中做傻事),实现算法的代码片段找出x应该有的名字(calc_x()),而不是拥有算法inline,现在只有那个名字在代码.
当然,这段代码非常简单,实际上并不需要我列出的好处,但是当你处理更复杂的现实代码时,我发现,从长远来看,更实用的方法更好.
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |