2016-01-30 3 views
1

Я исторически читал, что предварительный прирост быстрее/лучше по разным причинам (а также что он должен быть спорным для современных компиляторов). Но не требуется ли дополнительная обработка для процесса копирования, когда объекты вступают в игру?Скорость пост-инкремента против оператора предварительного инкремента по объектам

Например:

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

    return copy; 
} 

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

    return *this; 
} 

Оператор Преинкремент нуждается в операции копирования. Так просто делать это должно быть медленнее:

loop { 
--object 
} 

ли философия «пра против поста» применяется только к примитивам?

+0

Пост-приращение нуждается в копировании, pre-increment - нет. Не проблема для POD, но для классов копии могут быть дорогими. Трудно сказать, что еще вы просите, извините. –

ответ

1

По той причине, что вы описали, как правило, считается хорошей практикой использовать преднаблюдение и предопределение на итераторах. Хороший оптимизирующий компилятор может удалить ненужную копию, но вы не можете этого гарантировать.

Что касается фактического preincrement и postincrement, которые все еще быстрее или медленнее для примитивов, этот совет, вероятно, был неправильным в течение по меньшей мере десятилетия. Оптимизация компиляторов действительно хороша в определении ненужных копий или операций, и я был бы поражен, если бы они не могли понять, что не сделать ненужную копию.

Смежные вопросы