第十八章 25重载自加运算符的执行次序

// 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;
}*/

  

posted @ 2012-09-24 22:29  简单--生活  阅读(251)  评论(0编辑  收藏  举报
简单--生活(CSDN)