std:数组索引和运算符[]

问题描述 投票:0回答:1

为什么操作员

[]
在这里工作?

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
循环,但这并没有帮助我理解。

c++ arrays indexing operator-keyword c++23
1个回答
0
投票

在第一个循环中,

i
0
开始,并在传递到a[]
之后递增。因此,循环正在访问索引 
0..9
 处的数组元素。

在第二个循环中,

i

10
开始,并在
被传递到a[]之前递减。因此,循环也访问索引
0..9
处的数组元素。
    

© www.soinside.com 2019 - 2024. All rights reserved.