C++的前置++、后置++和前置--、后置--
程序员文章站
2022-06-24 12:17:35
一、C++的前置++和后置++ 在C++中,运算符重载是你必须要掌握的重点,而前置++和后置++有什么区别呢?其实前置++和后置++是有关于 影响效率的问题,前置++比后置++的效率要高,原因是因为前置++不会产生一个临时对象而去直接进行++运算,而后 置++要先产生一个临时对象来保存当前数据,然后 ......
一、C++的前置++和后置++
在C++中,运算符重载是你必须要掌握的重点,而前置++和后置++有什么区别呢?其实前置++和后置++是有关于
影响效率的问题,前置++比后置++的效率要高,原因是因为前置++不会产生一个临时对象而去直接进行++运算,而后
置++要先产生一个临时对象来保存当前数据,然后进行++运算,最后返回临时对象,这样无形中会增加额外的开销,
这样肯定会影响效率的。下面是两种++运算的重载函数:
class Base { public: Base(int data=0):m_data(data) { } ~Base() {} public: Base& operator++() { m_data++; return *this; } Base operator++(int) { Base tmp(m_data); m_data++; return tmp; } private: int m_data; };
在上面的重载++运算符的函数中,第一个函数就是前置++运算符的重载,因为是返回的是当前对象,所以函数可
以引用返回。第二个函数就是后置++运算符的重载,因为在其内部创建了一个临时对象用来进行++运算,并且最后返
回的是临时对象的值,所以函数不能以引用返回,而且为了区分是前置++还是后置++运算符的重载,则添加一个参数
用于区别。
二、C++的前置--和后置--
同样的既然有前置++和后置++就会有前置--和后置--,下面是两种--运算符的重载:
class Base { public: Base(int data=0):m_data(data) { } ~Base() {} public: Base& operator--() { m_data--; return *this; } Base operator--(int) { Base tmp(m_data); m_data--; return tmp; } private: int m_data; };
其解释和上面的++运算符重载解释基本相同,这里就不再次赘述了。