Чтобы лучше понять, вы должны представить (или посмотреть), как эти операторы реализованы. Обычно префиксный оператор ++ будет записан более или менее так:
MyType& operator++()
{
// do the incrementation
return *this;
}
Поскольку this
было изменено "на месте", мы можем вернуть ссылку на экземпляр, чтобы избежать бесполезной копии.
Вот код оператора постфикса ++:
MyType operator++(int)
{
MyType tmp(*this); // create a copy of 'this'
++(*this); // use the prefix operator to perform the increment
return tmp; // return the temporary
}
Поскольку постфиксный оператор возвращает временное значение, он должен возвращать его по значению (в противном случае вы получите висячую ссылку).
У C ++ Faq Lite также есть параграф на эту тему.