C++递增运算符重载

先上代码:

#include<iostream>
using namespace std;

class Test
{
public:
	int a;
	Test(int _a)
	{
		a = _a;
	}
	Test& operator++()
	{
		this->a++; //可简化为a++
		return *this; //返回引用
	}
	Test operator++(int)
	{
		Test t = *this; //先记录当前结果
		this->a++; //实际递增(可简化为a++)
		return t;//返回原本值(返回副本值)
	}
};

int main()
{
	Test t1(1);

	cout << (t1++++).a << endl;
	cout << (t1).a << endl;
	cout << (++++t1).a << endl;
	cout << (t1).a << endl;
}

输出结果 1 2 4 4

Q:为什么前置递增返回引用,后置递增返回值
A:为了实现链式编程,即保证++++t1能得到想要结果,所以需要返回引用,保证一直在对同一个对象进行操作。
而后置递增返回值是因为后置递增是先用值再进行加操作,这样必须先用一个临时变量t来存储原本值,而c++不允许返回临时变量的引用,所以只能返回值。
Q:为什么t1++++后t1.a打印出来是1,而不是2
A:因为返回的是值,第二次并不是在原本t1上进行++。
分析:t1++++等同于(t1++)++,先看t1++,内部让t1的a值加1,然后返回一个新的Test类型数据,他是原本t1的一个副本。之后剩下的++符号变为了在新Test上进行操作。这个新Test假设名字为T,(t1++)++执行内部后等于T++。所以综上,t1实际只改变了一次。
Q:那么普通的int类型连续递增会怎么样
A:经过测试,int a=0;++++a可正常运行;a++++,直接报错,个人理解为由于后置递增只能返回值类型,没办法链式,强行a++++的话a值也之后改变一次,无意义,所以c++直接禁止我们这样。
Q:我不准备用链式的话前置递增可不可以也返回值
A:可以

以上为个人学习后的理解,有误欢迎指正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值