比较在C++中的效率?(abs(X)> 1 vs abs(x)!= 0)

Luc*_*ano 4 c++ optimization comparison performance

我知道 - 过早优化.
但是我有代码可以找出一个位置是否与缓存位置相比发生了变化.

目前的代码是:

if(abs(newpos-oldpos) > 1){
    .....
}
Run Code Online (Sandbox Code Playgroud)

使用以下内容更有效吗?

if(abs(newpos-oldpos) != 0){
    ....
}
Run Code Online (Sandbox Code Playgroud)

为什么或者为什么不?我目前正在讨论我的头脑,它更具可读性,并且想知道是否存在性能上的差异.

Noa*_*ing 13

为什么不呢?

if (newpos != oldpos) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

由于缺乏abs()和更清晰的启动,比两者都更有效.

  • 但它与(abs(newpos-oldpos)!= 0)相同.问题是关于平等,并且其中一个代码是错误的(我的赌注是第一个)或者Luciano比比较运算符的效率更大的问题. (2认同)

Mic*_*urr 13

不改变的主要原因

(abs(newpos-oldpos) > 1)
Run Code Online (Sandbox Code Playgroud)

(abs(newpos-oldpos) != 0)
Run Code Online (Sandbox Code Playgroud)

是他们在语义上是不同的.

abs(newpos-oldpos) == 1你得到不同的结果.这就是为什么你不愿意仅仅因为"改变事物"的一个例子 - 除了事实上不会有任何可衡量的表现差异(也可能没有实际差异).