// 25重载自加运算符的执行次序
/*
#include <iostream>
using namespace std;
class A
{
public:
A(int n){ rx=n;}
friend ostream&operator<<(ostream&s, const A&c){
s<<c.rx<<endl;
return s;
}
//前置运算符
int operator++(){ cout<<"++i"<<endl; rx++; return rx; }
//后置自加
int operator++(int){ cout<<"++i"<<endl; int i= rx; rx++; return i; }
private:
int rx;
};
int main()
{
A a(3);
//cout<<a++<<++a<<endl; //这样输出55是正常的
cout<<++a<<a++<<endl; //这样输出的是5 3
//给两个函数增加功能,前置自加就是先自加,然后返回自加后的值
//后置自加与其相反,需要先将rx的值返回,然后再自加
//后置自加运算符函数operator++(int)调用在先,
//前置自加运算符函数operator++()调用在后,输出的数值更中令人迷糊了,先车出5.然后输出3这是为什么
//这是因为当给一个函数传进来的参数不是一个简单的变量,而是一个有运算的表达式时,可能发生先把所有的表达式求值,再进行参数压栈的情况,也有可能是一边求值一边压栈,求出一个压一个,不同的编译器做法不尽相同
//首先将参数的值求出,然后再压栈,由于在无括号的情况下,求参数的值的顺序是从右到左的,因此首先求最右侧的参数a++;
return 0;
}*/