Префиксная и постфиксная версии operator++() отличаются благодаря фиктивному параметру:
intclass Counter {
public:
// Префикс: ++obj
Counter& operator++() {
++value;
return *this;
}
// Постфикс: obj++
Counter operator++(int) {
Counter temp = *this;
++value;
return temp;
}
};
Фиктивный параметр int в постфиксной версии не несёт никакого функционального назначения, кроме как отличить её от префиксной версии. Компилятор использует этот параметр как сигнал для разрешения перегрузки.
Помимо различия в параметрах, отличаются и типы возвращаемых значений:
Counter&)Counter)Постфиксная версия обычно менее эффективна, потому что создаёт временную копию объекта. По этой причине префиксный инкремент предпочтительнее в коде, критичном к производительности, особенно при работе со сложными объектами.
Counter c;
++c; // Вызывает префиксный operator++()
c++; // Вызывает постфиксный operator++(int)
Фиктивный параметр int в постфиксном operator++() используется для сохранения предыдущего значения объекта перед инкрементом.
Новый — ещё не проверен сообществом
Вы