首页 > 代码库 > C++重载自增运算符的效率问题
C++重载自增运算符的效率问题
C++规定后缀形式有一个int类型参数,当函数被调用时,编译器传递一个0做为int参数的值给该函数。
increment的前缀形式表示“增加然后取回”,后缀形式表示“取回然后增加”。
1 #include "stdafx.h" 2 #include "assert.h" 3 class A 4 { 5 public: 6 A(int i) 7 :m_i(i) 8 { 9 }10 // ++i11 A& operator++()12 {13 ++m_i;14 return *this;15 }16 // i++17 const A operator++(int)18 {19 A tmp = *this;20 ++(*this); // Implemented by prefix increment21 return A(tmp);22 }23 int m_i;24 };25 int _tmain(int argc, _TCHAR* argv[])26 {27 int i = 0;28 int i1 = i++; // i1 = 0; i = 1;29 int i2 = ++i; // i2 = 2; i = 1;30 A a(0);31 A a1 = a++; // i1 = 0; i = 1;32 A a2 = ++a; // i2 = 2; i = 1;33 34 //a++++; //avoid35 //++++a; //support36 assert(i1 == a1.m_i);37 assert(i2 == a2.m_i);38 return 0;39 }
说明
1. 类中的++操作符号重载之后必须保证其语意与全局++相同。
2.为了区分前后,用++()表示前自增,用++(int)后自增。
3.因为按照前自增的标准定义,应该支持"++++a"的语法,而且两次前自增都应该是对a对象的自身操作,如果返回A类型,那第二次前自增调用的是临时对象的前自增操作。
4.后自增应该返回"const Complex".这可以防止形如"a++++"的用法。
5.一般通过前自增操作来实现后自增操作符函数。
从上面可以看出,后置运算需要复制一个无用的临时对象,效率肯定是要低一点的。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。