【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]呢?
结果:
可发现,当改成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 -------------------------------------