在C++中,preincrement比后增量更快 - 是吗?如果是的话,为什么呢?

35 c++

可能重复:
在C++中i ++和++ i之间是否存在性能差异?

我听说在C++中,preincrements(++ i)比postincrements(i ++)快一点.真的吗?这是什么原因?

tva*_*son 55

后增量通常涉及保留前一个值的副本并添加一些额外的代码.预增量只是做它的工作并且不受影响.我通常预先增加,除非语义会改变,实际上需要后增量.

  • 换句话说: i++ 相当于 {auto temp(i); increment(i);return temp;},++i 等价于 {increment(i); return i;} 因此,副本就是差异。 (3认同)

Dre*_*all 9

后增量必须复制对象以返回未增加的值.对于类类型,这可能很重要,但对于"类似int"类型(包括指针),它可能不是.


lar*_*moa 7

普通类型类型(例如int)的差异可能可以忽略不计.我猜测编译器能够优化这种情况(例如,在适当的情况下将后缀转换为前缀增量).但是,对于复杂类型(通常是STL迭代器,差异可能会很明显).在这些情况下,编译器无法切换​​到前缀,因为操作符实际上可能完全不同.我建议阅读STL迭代器和性能以获得关于使用STL迭代器的后增量的性能损失的一些背景信息(简短的故事:它需要两倍的时间作为预增量).


Ric*_*ton 5

在任何合适的编译器上,如果不使用该值,则++ i和i ++相同。

如果使用该值,如果需要相同的语义,++ i将需要一个临时值来存储预增值。

  • 您的意思是在第二条语句中使用i ++。 (13认同)