您的位置:首页 > 其它

为什么自增(increment)运算符的 前置(prefix) 比 后置(postfix) 效率高?

2010-11-07 18:16 357 查看
先看一段代码:

#include <iostream>
using namespace std;
int main()
{
int num1 = 1, num2 = 1;
int sum1, sum2;
sum1 = ++num1;
sum2 = num2++;
cout << "num1 = " << num1 << endl
<< "num2 = " << num2 << endl
<< "Sum1 = " << sum1 << endl
<< "Sum2 = " << sum2 << endl;
return 0;
}


输出结果为:

num1 = 2

num2 = 2

sum1 = 2

sum2 = 1

原理: 前置运算符,先将自身递增,然后返回自身;

后置运算法,先创建自身的一个副本,而后自身递增,然后返回副本。

正如上例代码:

sum1 = ++num1; --> num1先自增本身,值变为2,再返回本身,sum1即被赋值为2;

此时,num1 = 2, sum1 = 2。

sum2 = num2++; -->num2先创建自身副本(假设为tmp),tmp = num2,然后num2自增,

值变为2,返回副本tmp,sum2即被赋值为1;

此时,num2 = 2, sum2 = 1。

再来看一看运算符的重载,更加一目了然。

class A
{
public:
A& operator++(); //前置版本(prefix version)
A operator++(int);  //后置版本(postfix version)
private:
int num;
}
inline A& A::
operator++()
{
num += 1;
return *this;
}
inline A A::
operator++( int )
{
A tmp = *this; //创建副本
num += 1;      //自身增加
return tmp;    //返回副本
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: