所以,当我们的高级程序员不在时,我正在标记一个 C++ 测试,第一个问题是这样的:
如果没有编译器优化,哪种方法会运行得更快?
方法一
for(int i = 0; i < 100000; i++) { }
方法二
for(int i = 100000; i >= 0; --i) { }
现在,如果您像我和我遇到的几乎所有其他开发人员一样(现在保存一个),您就会被引导相信前置增量和前置减量运算符 ( ++i
and --i
) 本质上比后置增量慢& 后减运算符。所以我很自然地选择了Method 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
出于所有意图和目的,这些方法是平等的!
那么,这个神话是从哪里来的呢?它曾经是真的,在新的编译器中变成了假的吗?期待有趣的讨论。:)