对象上的后增量与前增量运算符的速度

Speed of post-increment vs pre-increment operator on objects

本文关键字:运算符 速度 对象      更新时间:2023-10-16

我从历史上读到,由于各种原因,预增量更快/更好(而且它在现代编译器上应该没有意义)。但是,当对象发挥作用时,复制过程不需要额外的处理吗?

例如:

iterator iterator::operator++(
   int)
{
   iterator copy(*this);
   _index++;
   return copy;
}
iterator& iterator::operator++() {
   _index++;
   return *this;
}

预增量运算符需要复制操作。所以简单地这样做应该更慢:

loop {
--object
}

"pre vs post"的哲学是否仅适用于原语?

正是由于您描述的原因,在迭代器上使用预递增和前递减通常被认为是一种很好的做法。一个好的优化编译器可能能够删除不必要的副本,但你不能保证这一点。

至于对于原语来说,实际的预增量和后增量是更快还是更慢,这个建议至少十年来可能是不正确的。优化编译器非常擅长发现不必要的副本或操作,如果他们无法弄清楚不制作不必要的副本,我会感到惊讶。