前++与后++

自增符号分为前++与后++。对于这两个符号,单独使用时,若变量为内置数据类型,则基本没有区别;若变量为自定义数据类型如STL中,前++的效率要高于后++,因为后++使用时需要一个临时变量保存变量自增前的值,所以STL中关于iterator都是用前++。今天主要讨论一下前、后++与其他运算混合使用时的区别。

先看一下示例代码:

#include <iostream>
using namespace std;

int main()
{
	int a=10;
	int b=20;
	int c=30;
	cout<<a<<endl<<(a++)+(a++)<<endl<<a<<endl;
	cout<<a<<endl<<endl;

	cout<<b<<endl<<(b++)+(++b)<<endl<<b<<endl;
	cout<<b<<endl<<endl;

	cout<<c<<endl<<(++c)+(++c)<<endl<<c<<endl;
	cout<<c<<endl<<endl;
	return 0;
}

运行结果为:


在讨论运行结果之前首先要明确一件事情,即cout语句中的运算是从右向左的。

参考http://blog.youkuaiyun.com/keyeagle/article/details/6549771

如第一段输出为12、20、10、12,由第一个值为12而第三个值为10可见打印的第三个a的值并未受到自增的影响,而第一个a的值为自增后的值。由输出的20可以知道,表达式“(a++)+(a++)”先计算出结果后自增的。

再看第二段和第三段输出可以知道,表达式“(b++)+(++b)”中“++b”先使得b的值自增1,然后再计算表达式的值为42(此时式中b的值均为21);而“(++c)+(++c)”中两个“++c”使得c的值此时为32,然后计算整个表达式的值为64。


综上,前++与后++的区别为:

前++:先+1赋值再执行表达式中的其他运算(此时表达式中的同一变量均为增1后的值);

后++:先执行表达式中的其他运算再+1赋值。




补叙:C++重载前置++和后置++

class INT
{
    friend ostream& operator<<(ostream& os, const INT& i)
    {
        os << '[' << i._i << "]";
        return os;
    }
private:
    int _i;
public:
    INT(int i) :_i(i) {}

    // prefix: increment and then fetch
    INT& operator++()
    {
        ++(this->_i);
        return *this;
    }

    // postfix: fetch and then increment
    const INT operator++(int)
    {
        INT tmp = *this;
        ++(*this);
        return tmp;
    }
};

int main()
{
    INT y = 10;
    cout << ++y << endl << y++ << endl;
    getchar();
    return 0;
}


输出结果:

[12]

[10]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值