所以,当我们的高级程序员离开时,我正在进行C ++测试,第一个问题是这样的:
如果没有编译器优化,哪种方法运行得更快?
方法1
for(int i = 0; i < 100000; i++) { }
方法2
for(int i = 100000; i >= 0; --i) { }
现在,如果你像我一样和我遇到的几乎所有其他开发人员(现在只保存一个),你就会被认为是预先增加的&amp;预递减运算符(++i
和--i
)本质上比后递增和&amp;后递减运算符。所以我自然而然地选择方法2 。
但是,我们的高级程序员返回并告诉我这两个函数将在相同的时间运行。
认为这只是一些精心设计的笑话,我开始证明他是错的并鞭打了这个:
#define ITERATIONS (1000000000)
clock_t start = clock();
for(int64_t i = 0; i < ITERATIONS; i++)
{}
auto first_clock = clock() - start;
start = clock();
for(int64_t j = ITERATIONS; j > 0; --j)
{}
auto last_clock = clock() - start;
令我惊讶的是:
first_clock = 25333
last_clock = 25277
出于所有意图和目的,这些方法是相同的!
那么,这个神话来自哪里?它曾经是真的,在新的编译器中变得虚假吗?期待有趣的讨论。 :)