首页 > 代码库 > C++ 的自增操作符和自减操作符

C++ 的自增操作符和自减操作符

    在C++ 中自增和自减操作符为对象加1或者减1提供了很多的方便,但是他们有前置和后置两种形式,以及与其它操作混合使用容易出现错误,所以在次写下自己的理解。

    前置自增操作符,该操作使其操作数加1,操作的返回结果是修改后的数,

    前置自减操作符,该操作使其操作数减1,操作的返回结果是修改后的数,

int i = 0,j = 0;    j = ++i;    cout<<"i="<<i<<endl;//1    cout<<"j="<<j<<endl;//1    j = i++;    cout<<"i="<<i<<endl;//2    cout<<"j="<<j<<endl;//1

    后置自增操作符,该操作使其操作数加1,操作的返回结果是修改前的数,

    后置自减操作符,该操作使其操作数减1,操作的返回结果是修改前的数,

    

int i = 2,j = 2;    j = --i;    cout<<"i="<<i<<endl;//1    cout<<"j="<<j<<endl;//1    j = i--;    cout<<"i="<<i<<endl;//0    cout<<"j="<<j<<endl;//1

建议:只有在必要时才使用后置操作符!原因是:使用前置操作符需要做的工作更少,只需要加1后返回加1后的结果就行,而后置操作符需要先保存操作数原来的值,以便返回未加1之前的操作数作为操作结果。

 

在表达式中组合使用解引用和自增操作

vector<int> ivec;    int cnt = 10;    while(cnt>0)        ivec.push_back(cnt--);//10,9,8...1    vector<int>::iterator iter = ivec.begin();    while (iter !=ivec.end())        cout<<*iter++<<endl;//10,9,8...1

由于后自增操作符的优先级要高于解引用,所以*iter++相当于*(iter++).但是如果改成*++iter 则会出现错误,因为这样的话,ivec第一个元素没有输出,并企图对一个多余的元素进行解引用。

对于一个经典的例子:

*point1++ = *point2++;

等价于:

*point1 = *point2;++point1;++point2;

 

C++ 的自增操作符和自减操作符