以下代码段的性能是否有任何差异?哪一个表现最好?为什么?
int i = 1000000000;
while(i != 0) { i--; }
或
int i = 1000000000;
while(i) { i--; }
或
int i = 1000000000;
while(i > 0) { i--; }
我看到很多人使用第一个例子,并想知道为什么。更容易阅读?
答案 0 :(得分:6)
在这个上下文中它们都是相同的,任何体面的编译器都会为这三个生成相同的代码。 在任何情况下,尝试手动优化这样的琐碎事物(整数比较)是没有意义的。你的编译器会弄清楚它并在代码生成过程中做得比你想象的要好得多。所以,只需停止尝试,而只需编写最多可读代码,然后信任编译器 - 无论如何,这些都不会产生任何性能差异。
答案 1 :(得分:3)
以下代码段的性能是否有任何差异?
没有
前两个是等效的,所有三个都可以优化到完全相同的组件。
我看到很多人使用第一个例子,并想知道为什么。更容易阅读?
它要求读者知道的语言规则少于第二个。特别是,第二个程序需要知道条件表达式转换为bool
,并且int
的转换与不等式为零的结果相同。
请注意,如果用浮点数替换i
,或者修改了减量以使其具有更高的复杂度(例如:递减2),则第三个选项最容易证明是正确的。使用整数和单个递减,没有区别。