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对象),如果迭代数百万次,则具有临时状态可能会相当慢.
经验法则
除非您特别需要后缀语义,否则请使用前缀版本.
| 归档时间: |
|
| 查看次数: |
3865 次 |
| 最近记录: |