在C++中允许对自增运算符(++)重载。由于这个运算符前置(++i)和后置(i++)执行结果不同,为了区分这两种情况,C++语法上规定了它们有不同的重载函数:
operator++(); //前置式 ++i operator++(int); //后置式 i++
所以执行++i时调用operator++()而i++则调用operator++(0)。为什么这两个函数会有效率上分差别呢?
下面举个例子对这两个函数重载:
class Increment { public: Increment& operator++() //前置式,先加后取出 { cout << "operator++()" << endl; this->i += 1; return *this; }; const Increment operator++(int) //后置式,先取出后加 { cout << "operator++(0)" << endl; Increment old = *this; this->i += 1; return old; }; int get_i() { return i; }; private: int i = 0; }; int main() { Increment inc; inc++; ++inc; cout << "inc: " << inc.get_i() << endl; return 0; }
由以上代码可以看出,前置式函数只需要对对象Increment做加的动作后返回即可;而后置式要先定义一个临时对象Increment保存加之前的值再做加 *** 作,这个临时对象的出现带来了赋值、调用构造函数和析构函数额外的 *** 作。
所以,前置式比后置式效率要高,如果你只是单存的对对象进行累加,建议使用前置式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)