这里主要说的是后置版本的递增运算符的运用,后置版本递增运算符需要将原始值存储下来以便于返回这个未修改的内容。什么意思?下面通过实例来解释一下,代码是我自己测试时用的。
#include<iostream>
#include <vector>
using namespace std;
int main(int argc, char const *argv[])
{
vector<int> vec;
for (int i = 10; i != 20; ++i)
{
vec.push_back(i);
}
vector<int>::iterator it = vec.begin();
while (it != vec.end() && *it <= 15)
{
cout << "the value is : " << *it++ << endl;
}
system("pause");
return 0;
}
后置递增运算符大的优先级高于解引用运算符,因此*it++等价于*(it++)。先把it的值加1,然后返回it的初始值的副本作为其求值结果,此时解引用运算符的运算对象是it未增加之前的值。最终,输出的是it开始时指向的那个元素,并将指针向前移动一个位置。也就是说,上面实例代码运行的结果,是从vec[0]开始输出的。我自己是这么理解的,其实都一样,就是说后置运算符把“值”给出去的时候,用的副本的值,再用到自己的时候,是新值。