++操作符重载代码分析
2017-04-27 16:40
218 查看
之前在你必须知道的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引用,而后置++的重载 需要一个类的临时变量,这涉及到类的构造与析构,消耗了更过的资源和时间。
因此,在大型代码中,建议使用前置++来自增一个类或者变量是 最佳的选择。
相关文章推荐
- myicq-1.0a1服务器代码的一点分析(二)—在线人员管理与内存分配
- 关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码
- NT,2000,XP 的 CDROM 引导扇区代码分析
- XY52代码整理和分析
- 一个方向控制射击小游戏的代码分析!(AS1.0)
- osworkflow的入口代码分析
- ORACLE常见错误代码的分析与解决(一)
- VC单文档切分动态更换多视图代码分析
- w3l.exe逆向之反汇编代码分析篇
- 对.NET Framework "事件"机制理解的代码分析
- IntelliJ IDEA 4 新特性 之 On-the-Fly Code Analysis(动态代码分析)
- ORACLE常见错误代码的分析与解决(一)
- ORACLE常见错误代码的分析与解决(三)
- struts简单例子的分析(含代码注释和配置文件说明)
- SQL worm sapphire 关键代码分析
- myicq1.0a1服务器代码分析(三)服务器集群
- struts简单例子的分析(含代码注释和配置文件说明)
- ORACLE常见错误代码的分析与解决(二)
- osworkflow的代码结构分析
- 如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)