Bo operator post-inkrementacji zwraca nowego inta o pierwotnej wartości inkrementowanego inta. A operator pre-inkrementacji zwraca referencje na inkrementowaną zmienną.
Na przykładzie kodu:
Weźmy sobie taką strukture. C++ nie pozwala na nadpisywanie operatorów typów wbudowanych, więc ciężko byłoby to sensownie pokazać.
struct Int
{
int val;
Int operator++(int); // operator post-inkrementacji
Int & operator++(); // operator pre-inkrementacji
};
Int Int::operator++(int) //operator post-inkrementacji
{
Int tmp = *this;
this->val = this->val + 1;
return tmp;
}
Int & Int::operator++() //operator pre-inkrementacji
{
this->val = this->val + 1;
return *this;
}
Dla rozróżnienia operator post-inkrementacji ma w argumencie symbolicznego inta. Stąd ten int w moim przykładzie.