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

时间:2016-01-30 00:58:48

标签: c++ optimization iteration

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

例如:

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

   return copy;
}

iterator& iterator::operator++() {
   _index++;

   return *this;
}

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

loop {
--object
}

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

1 个答案:

答案 0 :(得分:1)

正是出于这个原因,您通常认为在迭代器上使用preincrement和predecrement是一种很好的做法。一个好的优化编译器可能会删除不必要的副本,但你无法保证这一点。

至于原始人的实际前增量和后增量是否仍然更快或更慢,这个建议至少可能十年不正确。优化编译器非常善于发现不必要的副本或操作,如果他们无法做出不必要的副本,我会感到惊讶。