++操作符重载代码分析
之前在你必须知道的495个C语言问题,学习体会三中提到了C++的自加++重载,以此说明前置++ 和后置++的效率问题,现在这这篇文中给出 代码来分析下:
#include <iostream>
using namespace std;
class Integer
{
public:
Integer(long x):m_data(x){};
Integer(){};
~Integer(){};
Integer& operator++();
Integer operator++(int);
void printIn();
private:
long m_data;
};
//前置++
Integer& Integer::operator++()
{
cout << "prefix ++ opreator called"<<endl;
m_data += 1;
return *this;
}
//后置++,重载的区别在于其参数增加一个int类型的哑元,这是C++规定的,我就照做了
Integer Integer::operator++(int)
{
cout << "suffix ++ operator called"<< endl;
Integer temp = *this;
m_data ++;
return temp;
}
void Integer::printIn()
{
cout << "integer is "<< this->m_data << endl;
}
int main(int argc,char *argv[])
{
Integer a = 90;
Integer b;
Integer c;
c = ++a;
c.printIn();
b = a++;
b.printIn();
return 0;
}
输出如下:
g++ plusop.cpp && ./a.out
prefix ++ opreator called
integer is 91
suffix ++ operator called
integer is 91
总结下:通过以上++的重载可以看到,前置++的重载 是直接返回的*this引用,而后置++的重载 需要一个类的临时变量,这涉及到类的构造与析构,消耗了更过的资源和时间。
因此,在大型代码中,建议使用前置++来自增一个类或者变量是 最佳的选择。