gpt4 book ai didi

c++ - if (flag==0) 或 if (0==flag) 哪个会执行得更快?

转载 作者:IT老高 更新时间:2023-10-28 11:52:00 38 4
gpt4 key购买 nike

面试题:if (flag==0)if (0==flag) 哪个会执行得更快?为什么?

最佳答案

我还没有看到任何正确的答案(并且已经有一些)警告:Nawaz 确实指出了用户定义的陷阱。而且我很遗憾我仓促地对“最愚蠢的问题”投了赞成票,因为似乎很多人都没有做对,它为编译器优化提供了很好的讨论空间:)

答案是:

What is flag's type?

flag 实际上是用户定义类型的情况下。然后就看选择了operator==的哪个重载。当然,如果它们不是对称的,这似乎很愚蠢,但这当然是允许的,而且我已经看到了其他滥用行为。

如果 flag 是内置的,那么两者的速度应该相同。

来自 Wikipedia articlex86 上,我打赌 if 语句的 Jxx 指令:也许是 JNZ(跳转 if不为零)或其他等价物。

我怀疑编译器会错过如此明显的优化,即使优化已关闭。这是 Peephole Optimization 的对象类型专为。

编辑:再次出现,让我们添加一些程序集(LLVM 2.7 IR)

int regular(int c) {
if (c == 0) { return 0; }
return 1;
}

int yoda(int c) {
if (0 == c) { return 0; }
return 1;
}

define i32 @regular(i32 %c) nounwind readnone {
entry:
%not. = icmp ne i32 %c, 0 ; <i1> [#uses=1]
%.0 = zext i1 %not. to i32 ; <i32> [#uses=1]
ret i32 %.0
}

define i32 @yoda(i32 %c) nounwind readnone {
entry:
%not. = icmp ne i32 %c, 0 ; <i1> [#uses=1]
%.0 = zext i1 %not. to i32 ; <i32> [#uses=1]
ret i32 %.0
}

即使一个人不知道如何阅读 IR,我认为它是不言自明的。

关于c++ - if (flag==0) 或 if (0==flag) 哪个会执行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624536/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com