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

为何std::array的operator[]在递减循环中可正常工作?

解析这段C++递减循环的下标逻辑

你贴的代码如下:

for (std::size_t i = a.size() ; i--;)
    std::cout << a[i] << ' ';

这跟std::array的operator[]没有任何关系,问题完全出在循环里后置递减运算符的执行顺序上。

拆解循环的执行步骤(假设a.size()返回10):

  • 初始化阶段:i被赋值为10
  • 第一次循环条件判断:i--是后置递减操作——先判断当前i的值(10)是否为非0(条件成立),再把i减为9,接着执行循环体访问a[9]
  • 第二次循环条件判断:i--判断当前i的值(9)为非0,i减为8,访问a[8]
  • ……
  • 第十次循环条件判断:i--判断当前i的值(1)为非0,i减为0,访问a[0]
  • 第十一次循环条件判断:i--判断当前i的值(0)为假,循环直接终止,此时i会变成SIZE_MAX(std::size_t是无符号类型,0减1的结果),但循环不会再执行

说白了,这个循环的本质就是从i = a.size() - 1开始,遍历到i = 0,完全是运算符的特性导致的,和容器的下标运算符无关。

内容的提问来源于stack exchange,提问作者gidierre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:52:05