【c++】i++和++i 详解

【c++】i++和++i 详解

 参考:

++--++--)的区别  https://blog.csdn.net/u011321104/article/details/9280879

c++ Primer中文版》Stanley B Lippman  等著

1.小引

    递增 ++ 和递减-- 操作符为对象加 1或减 1 操作提供了方便简短的表示它们最一般的用法是对索引、迭代器或指向一个集合内部的指针加 1 或减1。

首先来看一个例子:

//自增运算符.cpp

#include<iostream>
#include<vector>
using namespace std;
int main()
{

int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int > b(10);
//赋值:将a逆序赋给向量b
for(int i=0,j=9; i<10; )
{
    b[i++]=a[j--];

}

vector<int >::iterator iter;
for(iter=b.begin(); iter!=b.end(); iter++)
{
    cout<<*iter<<" ";
}
cout<<endl;
return 0;
}

运行结果:

分析:此处采用b[i++]=a[j--];  a成功逆序赋值给b。那如果改成b[++i]=a[--j]呢?

扫描二维码关注公众号,回复: 1075560 查看本文章

结果:

可发现,当改成b[++i]=a[--j]后,b[0]未赋上值。这是因为i=0;++i的值为1;所以b[++i]=b[1],就跳过了b[0],所以b[0]未赋上值。

2.详解

i++ :先引用后增加,先在i所在的表达式中使用i的当前值,后让i加1

++i :先增加后引用,让i先加1,然后在i所在的表达式中使用i的新值

二者的实现代码:

   A  operator ++()         //前++
    {
        i=i+1;
        return *this;
    }

    A  operator ++(int)      //后++
    {
        A t=*this;          //先保存一份变量
        ++(*this);          //调用前++
        return t;
     }

分析可知:

(1) ++i是将i的值先+1,然后返回i的值

(2) i++是先将i的值存到寄存器里,然后执行i+1,然后返回寄存器里的值。

  -------------------------------------------         END      -------------------------------------

猜你喜欢

转载自blog.csdn.net/u012679707/article/details/80313425