You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:22:56