2016-08-23 94 views
-1

以下代码片段的性能有任何不同吗?哪一个表现最好,为什么?C++ int比较效率

int i = 1000000000; 

while(i != 0) { i--; } 

int i = 1000000000; 

while(i) { i--; } 

int i = 1000000000; 

while(i > 0) { i--; } 

我看到很多人使用的第一个例子,不知道为什么。更容易阅读?

+2

为什么人们拒绝投票而不是给出正常答案或只是望向别处?这是我认为的一个正常问题,他应该在哪里提出这个问题? – retinotop

+2

前两个是等价的;将int转换为bool与检查它不是零相同。与其他字面问题一样:1)循环内的工作肯定会占据你的时间,所以谁在乎? 2)知道你是否应该关心,分析它,以及3)如果你真的知道的话,看编译的代码。 – GManNickG

+0

@retinotop我没有投票,但OP没有显示他们自己的研究,如程序集输出或基准测试结果。没有努力的问题在这个网站上经常被看不起。这就是说,我瞧不起那些没有建设性批评的票。 – user2079303

回答

3

以下代码片段的性能有任何不同吗?

前两个是等效的,并且所有三个可以被优化以完全相同装配。

我看到很多人使用第一个例子,并想知道为什么。更容易阅读?

它要求读者比第二个知道更少的语言规则。特别是,第二个程序需要知道条件表达式转换为bool,并且从int的转换具有与不等于零相同的结果。

请注意,如果将i替换为浮点数,或者将减量修改为具有更多复杂性(例如:减少2),则第三个选项最容易证明是正确的。整数和单一递减没有区别。

6

在这种情况下,它们都是一样的,任何体面的编译器都会为这三个产生相同的代码。 在任何情况下,试图手动优化这样的小事情(整数比较)是毫无意义的。你的编译器会发现它,并在代码生成中做得比以前做得好得多。因此,只要停止尝试,而不是只写可读的代码,然后信任编译器 - 在任何情况下,这些都不会造成任何性能差异。