【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 -------------------------------------