注:重载++运算符的时候,前置比后置的++效率高很多。类的成员函数,隐含了一个this指针。操作符重载函数也不例外,也隐含了一个this指针。这个this指针是一个引用类型,所以,在返回的时候,也返回这个引用类型。而后置++操作,在函数中进行了一次值的拷贝,返回的不再是this指针指向的对象,而是一个副本。所以返回的就是一个类对象。
不要重载&& 和 ||运算符
1.从C++语法的角度来说,&&和||这两个运算符可以进行重载。
2.&&和||这两个运算符内置了短路规则(短路规则就是当某一个条件满足的时候就不再执行,在单个变量的时候不会发生太多问题,但是涉及到函数返回值的时候将会发生问题)。操作符重载是依靠函数重载来完成的。C++的函数参数都会被返回一个值,所以无法实现短路规则。
基本例程如下:
#include
class A
{
private:
int a;
public:
A(int i)
{
a = i;
}
void print()
{
printf("a = %d\n",a);
}
bool operator|| (A& aa)
{
printf("123\n");
return this->a && aa.a;
}
A& operator+ (A& aa)
{
A ret = 0;
ret.a = this->a + aa.a;
printf ("bugai\n");
return ret;
}
};
int main()
{
A a = 1;
A b = 1;
if (a || (a + b))
{
printf ("CYX\n");
}
return 0;
}
程序打印结果如下:

当程序运行时首先执行if(a && (a + b)),如果a,b是两个真正的变量,那么当判定a为真的时候程序将会直接打印CYX,并不会再继续判定(a + b),但是将"|运算符进行重载之后,if(a && (a + b))的实际格式如下:
if (a.operator|| (a.operator+ (b)))所以这个判定是先从内层进行判定,然后根据+重载函数的返回值作为参数再调用||运算符重载函数,所以程序打印结果如上图。