我从历史上看,由于各种原因,预增量更快/更好(并且在现代编译器上应该没有意义)。但是当对象发挥作用时,复制过程不需要额外的处理吗?
例如:
iterator iterator::operator++(
int)
{
iterator copy(*this);
_index++;
return copy;
}
iterator& iterator::operator++() {
_index++;
return *this;
}
预增量运算符需要复制操作。所以简单地这样做应该更慢:
loop {
--object
}
“pre vs post”的哲学是否仅适用于原语?
答案 0 :(得分:1)
正是出于这个原因,您通常认为在迭代器上使用preincrement和predecrement是一种很好的做法。一个好的优化编译器可能会删除不必要的副本,但你无法保证这一点。
至于原始人的实际前增量和后增量是否仍然更快或更慢,这个建议至少可能十年不正确。优化编译器非常善于发现不必要的副本或操作,如果他们无法做出不必要的副本,我会感到惊讶。