(1)
if (!cond)
Run Code Online (Sandbox Code Playgroud)
要么
(2)
if (cond == false)
Run Code Online (Sandbox Code Playgroud)
好像我看到很多人使用(1).但这不是最优的吗?在C++中,if (...)只要括号中的任何内容都是非零值,语句就会计算为true.因此,在(1)中,必须发生的是
cond而在(2)中,所有必须发生的是
cond为零(是否所有位都关闭)现在,检查所有位是否都关闭所花费的时间总是大于或等于检查是否有任何位的时间.因此,问题在于执行逻辑NOT的时间是否平均可以弥补任何差异.
我应该使用哪个来优化我的代码?
测试它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)
所以没有任何区别.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |