第十八章 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;
}*/

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值