前言
递增运算符( ++ )和递减运算符( – )是 C++ 语言中两个重要的一元运算符。
其实觉得设计的有点鸡肋。。。
一、理解
首先 i++是不能对其取地址的。
因为i++返回的是一个右值。关于左值右值可以看看:–左值与右值–
理解为++i 操作完返回了i 的引用。而i++操作完返回的是操作之前的临时变量。
二、实现
最简单的实现,实验调用机制:
int 在 括号内是为了向编译器说明这是一个后缀形式,而不是表示整数。
class fake_int
{
void operator++()
{
cout << "calling operator++()" << endl;
}
void operator++(int temp)
{
cout << "calling operator++(int temp)" << endl;
}
};
void main()
{
fake_int i;
i++;
++i;
}
**结果:**可以看出后缀i++调用的是带int 参数的重载。
总 结
递增和递减一般是改变对象的状态,所以一般是重载为成员函数。
重载递增递减,一定要和指针的递增递减区分开。因为这里的重载操作的是对象,而不是指针(由于指针是内置类型,指针的递增递减是无法重载的),所以一般情况的递增递减是操作对象内部的成员变量。
递增和递减分为前置和后置情况,a = ++b;(前置), a = b++;(后置)。因为符号一样,所以给后置版本加一个int形参作为区分,这个形参是0,但是在函数体中是用不到的,只是为了区分前置后置。
参考
https://blog.csdn.net/weixin_34321753/article/details/91364200
https://www.runoob.com/cplusplus/increment-decrement-operators-overloading.html