C++运算符优先级与vector迭代器:为何程序输出1而非4?
为什么这段C++代码输出1而非4?
嘿,这个问题其实是对C++迭代器后置递增运算符的理解误区~咱们一步步拆解代码来看看原因:
首先先把问题里的代码贴出来:
std::vector<int> v; v.push_back(1); v.push_back(4); std::vector<int>::iterator it = v.begin(); int n = *(it++); std::cout << n;
核心原因:后置递增运算符的行为
这里的关键就是it++这个后置递增操作,它的执行逻辑是:
- 第一步:先创建当前迭代器
it的一个副本,这个副本仍然指向迭代器当前的位置(也就是vector的第一个元素1) - 第二步:把原迭代器
it向后移动一位,指向vector的第二个元素4 - 最后对第一步的副本进行解引用
*,拿到的值就是1,并把这个值赋值给了变量n
所以当你输出n的时候,自然会得到1而不是4。
如果想要得到4,你需要使用前置递增运算符++it,它会先把迭代器移动到下一个位置,再返回移动后的迭代器,这时候*(++it)就会拿到4了。
内容的提问来源于stack exchange,提问作者Casperon
相关产品推荐
相关产品推荐

