为什么++ i比i ++更有效?

Mar*_*ean 3 c++ for-loop while-loop do-while

根据谷歌C++样式指南,"当忽略返回值时,'pre'形式(++i)的效率永远不会低于'post'形式(i++),并且效率通常更高."

该指南继续解释原因,但我不完全理解.思考?也许有人可以提供这个概念的例子?

Mic*_*Mic 12

i++递增i并返回初始值i.意思是:

int i = 1;
i++; // == 1 but i == 2
Run Code Online (Sandbox Code Playgroud)

但是++i返回实际递增的值:

int i = 1;
++i; // == 2 and i == 2 too, so no need for a temporary variable
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,编译器必须创建一个临时变量(在使用时)1而不是2(在它不是常量的情况下,而是动态值,例如从调用返回).

在第二种情况下,它不必.所以第二种情况保证至少同样有效.

通常,编译器将能够将第一种情况优化为第二种情况,但有时它可能无法实现.

无论如何,我们谈论的影响是微不足道的.

但是对于更复杂的对象(如类似iterators对象),如果迭代数百万次,则具有临时状态可能会相当慢.

经验法则

除非您特别需要后缀语义,否则请使用前缀版本.