Странно, но если переопределить префиксную и постфиксную операцию ++, то порядок её выполнения отличается от операции со встроеным типом int.
А именно представим следующий код:
class A
{
public:
A()
:i_(0)
{
}
A(int val)
:i_(val)
{
}
const A operator ++ (int)
{
A oldVal = *this;
++i_;
return oldVal;
}
operator int() const
{
return i_;
}
A operator + (const A &rhs) const
{
A retVal;
retVal.i_ = rhs.i_ + i_;
return retVal;
}
private:
int i_;
};
int _tmain(int argc, _TCHAR* argv[])
{
A a(0);
int k = a++ + a++;
int i = 0;
int l = i++ + i++;
return 0;
}
в случае с использованием класса A, значение k равно 1, а в случае со встоеным типом int — значение l равно 0.
Так какой же все таки порядок выполнения операций + и посфиксного ++