检查条件是否为真更快?

Don*_*uth -2 c++ optimization

(1)

if (!cond)
Run Code Online (Sandbox Code Playgroud)

要么

(2)

if (cond == false)
Run Code Online (Sandbox Code Playgroud)

好像我看到很多人使用(1).但这不是最优的吗?在C++中,if (...)只要括号中的任何内容都是非零值,语句就会计算为true.因此,在(1)中,必须发生的是

  • 做一个合乎逻辑的NOT cond
  • 检查结果是否为非零(是否有任何位)

而在(2)中,所有必须发生的是

  • 检查是否cond为零(是否所有位都关闭)

现在,检查所有位是否都关闭所花费的时间总是大于或等于检查是否有任何位的时间.因此,问题在于执行逻辑NOT的时间是否平均可以弥补任何差异.

我应该使用哪个来优化我的代码?

Bau*_*gen 7

测试它clang -O3:

int main () {
    int i;
    cin >> i;

    if (i == 0)
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

产生

leaq    4(%rsp), %rsi
movl    $_ZSt3cin, %edi
callq   _ZNSirsERi
cmpl    $1, 4(%rsp)
sbbl    %eax, %eax
popq    %rdx
ret
Run Code Online (Sandbox Code Playgroud)

而

int main () {
    int i;
    cin >> i;

    if (!i)
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

产生

leaq    4(%rsp), %rsi
movl    $_ZSt3cin, %edi
callq   _ZNSirsERi
cmpl    $1, 4(%rsp)
sbbl    %eax, %eax
popq    %rdx
ret
Run Code Online (Sandbox Code Playgroud)

所以没有任何区别.