写 i != 0 和写 i > 0 对于正整数的比较哪个更快?

7
假设我有一个需要检查变量i是否大于零的程序。由于i始终为正,因此说i>0等价于i!=0
这两个表达式之间是否存在性能差异,为什么?
我知道这两者在性能上没有明显的区别,这更是一个哲学问题。

12
没有,不要担心这种事情。 - Ry-
1
我知道差别,如果有的话,可能微不足道,但每次我写其中一个条件时,这个问题仍然会浮现在我的脑海中。 - PLPeeters
1
我知道这没有明显的区别,这更像是一种哲学问题。 - PLPeeters
1
你知道你在问什么指令集吗?是哪个处理器型号? - Pascal Cuoq
@Mehrdad,我不确定你的意思。显然,如果你只是用结果来终止循环或类似的操作,那么它很难产生影响。但在许多其他情况下,代码可能以“分支”形式编写,可以编译为非分支形式,这可能更好,也可能不是。 - dfeuer
显示剩余19条评论
1个回答

4

我认为这并没有什么可测量的差异,但与普遍的智慧相反,我会建议您使用!=而不是><,因为前者是一种更通用的操作,如果您要将代码转换为C++并使用迭代器而非指针,则并非所有迭代器都支持<> (但它们都支持!=)。


4
过早进行的非优化。 != 可以与前向迭代器一起使用,但不能处理步长大于1的情况。 <可用于大步长,但仅适用于随机访问迭代器。哪种方法更好取决于具体上下文。 - Ben Voigt
@MichaelPetrotta:我猜是这样。无论如何,我将这种推理应用于循环和非循环,所以对我来说并没有太大的区别。 - user541686
为了避免迭代超出末尾,请使用while (end - it > stride)进行测试,而不是while (it + stride < end). - Ben Voigt
我已经预先反驳了那个主张,它是错误的。 - Ben Voigt
被抢占,就像我在你上面的评论中所示,如何防止越界。此外,你的循环是错误的;它确实越界了(当 i + 2 == v.end() 时,你接着执行 i += 2 使得 i = v.end() 并测试 v.end() + 2 <= v.end(),因此 UB)。 - Ben Voigt
显示剩余16条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接