++操作符重载代码分析

之前在你必须知道的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引用,而后置++的重载 需要一个类的临时变量,这涉及到类的构造与析构,消耗了更过的资源和时间。

因此,在大型代码中,建议使用前置++来自增一个类或者变量是 最佳的选择。

posted @ 2017-04-27 16:40  Lckfa  阅读(149)  评论(0编辑  收藏  举报