Консультация № 143360
08.09.2008, 15:23
0.00 руб.
08.09.2008, 15:26
0 0 0
Здравствуйте Игорь!

Тут в одном из вопросов (142.872) спрашивалось:
"Какая операция быстрее выполнится: j = i++ или j = ++i, если j и i пользовательского типа?"

Ответ:
"По скорости j = i++ и j = ++i совершенно одинаковы при любом типе. "

Это действительно так?
Ведь для пользовательских типов постфиксный оператор инкремента (i++) реализуется через копирование результирующего значения, т.е. условно так:

T operator ++(int)
{
T oldValue(*this);
++*this;
return oldValue;
}

в то время как префиксный так:

T& operator++()
{
// собственно реализация инкремента
return *this;
}

т.е. постфиксный оператор для пользовательских типов выполняется медленнее из-за создания лишнего объекта на стеке и вызова его конструктора копирования (+ еще копирование при возврате результата).

Вопрос: Где же правда?

PS: насколько мне известно, именно поэтому при работе с итераторами STL в обязательном порядке рекомендуется использовать префиксный оператор (если не требуется промежуточное значение).

Обсуждение

Форма ответа