为什么操作员
[]
在这里工作?
int main()
{
std::array<std::size_t, 10> a;
// Example with C++23 size_t literal
for (auto i = 0uz; i != a.size(); ++i)
std::cout << (a[i] = i) << ' ';
std::cout << '\n';
// Example of decrementing loop
for (std::size_t i = a.size() ; i--;)
std::cout << a[i] << ' ';
std::cout << '\n';
}
我指的是递减循环中的这两行:
for (std::size_t i = a.size() ; i--;)
std::cout << a[i] << ' ';
据我检查,
a.size()
返回i=10
,但a[i]
被记为9而不是10,所以a[9]
没问题,而a[10]
显然不行。
那么,
std::array
是否通过此处的i
索引在雷达下“修复”operator[]
?否则,就我尝试编辑代码而言,我看不到它是如何组合在一起的。
我为
i
和 a[i]
值创建了变量,并更改了 for
循环,但这并没有帮助我理解。
在第一个循环中,
i
从0
开始,并在传递到a[]
之后递增。因此,循环正在访问索引
0..9
处的数组元素。在第二个循环中,
i
从
10
开始,并在被传递到
a[]
之前递减。因此,循环也访问索引 0..9
处的数组元素。