“if(systemReady == false)return”之间的区别是什么?和“if(!systemReady)返回;”在cpu

时间:2015-11-14 08:16:50

标签: objective-c

之间有什么区别

if(systemReady == false)return;

if(!systemReady)return;

在cpu中?

2 个答案:

答案 0 :(得分:1)

对于任何中间正常编译器,这些语句将编译为等效的机器代码。即使他们没有,但差异会很小,以至于你不得不疯狂照顾。不要过早优化。此外,算法的选择几乎总是会在确定性能方面淹没实现细节几个数量级。

最后,你永远不应该与truefalseYESNO等进行比较。这很危险,因为有真正的价值观并非如此等于true。任何非零值都是真的。

它的风格也不好。 systemReady(显然)已经是一个布尔值。没有必要将它与任何东西进行比较以使其成为布尔值。

问问自己,你会不会写:

if ((systemReady == false) == true) return;

或者:

if (((systemReady == false) == true) == true) return;

如果没有,那么你应该意识到为什么写if (systemReady == false) ...也是错误的。它同样无缘无故地添加冗余比较。

因此,请使用您的第二种形式:if (!systemReady) ...

答案 1 :(得分:0)

为什么不用调试器检查?好的,没有理由这样做。而且,说实话,没有理由回答你的问题。但是,......

表达式!expr将编译为如下所示:(取决于CPU)

Load expr
Complement
Branch if zero 

表达式expr==false将编译如下所示:

Load expr
(Compare with #0)
Branch if (not) zero

如果执行时间有差异,如果您将优化级别设置为高于无优化的值,编译器将自动选择更快的级别。

所以根本不关心这个。选择该选项,您认为最好阅读。

相关问题