可能重复:
Preincrement faster than postincrement in C++ - true? If yes, why is it?
Is there a performance difference between i++ and ++i in C++?STL迭代器:前缀增量更快?
我被告知,使用STL和它的迭代器的时候,我应该使用++iter
,而不是iter++
。
我引述:
因为它只能是快,慢从未
这是真的吗?
可能重复:
Preincrement faster than postincrement in C++ - true? If yes, why is it?
Is there a performance difference between i++ and ++i in C++?STL迭代器:前缀增量更快?
我被告知,使用STL和它的迭代器的时候,我应该使用++iter
,而不是iter++
。
我引述:
因为它只能是快,慢从未
这是真的吗?
是的。一般情况是这样。后缀增量的任务是保存并返回迭代器的旧值。这需要时间和精力,这通常会让它变慢。
对于实现传统的前/后语义的所有重载增量/减量运算符,通常都是如此。
此主题被打死。在这里做一个关于“前缀后缀”的搜索,以获得大量更详细的解释。
一个好的优化器通常可以删除旧值的复制,尤其是在未使用时。所以“慢”应该是“不快”。 –
@波佩尔森:这就是为什么我说“一般”。 – AnT
不,你说“通常比较慢”,我说“一般不会更快”。 :-)。问题是:为什么使用后增量,如果不是更快?没有理由! –
你可以在这个例子创建一个临时看到,在后缀......这慢于前缀,其中没有创建高级对象
// Define prefix increment operator.
Point& Point::operator++()
{
_x++;
_y++;
return *this;
}
// Define postfix increment operator.
Point Point::operator++(int)
{
Point temp = *this;
++*this;
return temp;
}
++ ITER国际热核实验堆相比更加++更快,因为不创建对象的副本
重复:http://stackoverflow.com/questions/2020184/preincrement-faster-than-postincrement-in-c-true-if-yes-why-is-it(et al ) – gregg