2011-03-07 75 views
6

可能重复:
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++

我引述:

因为它只能是快,慢从未

这是真的吗?

+0

重复:http://stackoverflow.com/questions/2020184/preincrement-faster-than-postincrement-in-c-tr​​ue-if-yes-why-is-it(et al ) – gregg

回答

10

是的。一般情况是这样。后缀增量的任务是保存并返回迭代器的旧值。这需要时间和精力,这通常会让它变慢。

对于实现传统的前/后语义的所有重载增量/减量运算符,通常都是如此。

此主题被打死。在这里做一个关于“前缀后缀”的搜索,以获得大量更详细的解释。

+2

一个好的优化器通常可以删除旧值的复制,尤其是在未使用时。所以“慢”应该是“不快”。 –

+0

@波佩尔森:这就是为什么我说“一般”。 – AnT

+1

不,你说“通常比较慢”,我说“一般不会更快”。 :-)。问题是:为什么使用后增量,如果不是更快?没有理由! –

5

你可以在这个例子创建一个临时看到,在后缀......这慢于前缀,其中没有创建高级对象

// 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国际热核实验堆相比更加++更快,因为不创建对象的副本