std::array 使用中的类型问题

记录一下在看 std::array 的课程时碰到的感觉很坑的类型问题。

先看代码,下面这段代码有两个类型使用不匹配的问题。

#include <iostream>
#include <array>

int main()
{
    std::array myArray { 7, 3, 1, 9, 5 };

    // Iterate through the array and print the value of the elements
    for (int i{ 0 }; i < myArray.size(); ++i)
        std::cout << myArray[i] << ' ';

    std::cout << '\n';

    return 0;
}
  • 第一个是 i < myArray.size():i 是有符号整型,而 std::array size()返回的是无符号整型
  • 第二个是 myArray[i]:[]操作符的参数是无符号整型,而 i 是有符号整型

std::array size()和[]操作符的参数都是一个定义在 array 中的 size_type(无符号整型)

所以严谨的话代码要写成下面这样:

#include <array>
#include <iostream>

int main()
{
    std::array myArray { 7, 3, 1, 9, 5 };

    // std::array<int, 5>::size_type is the return type of size()!
    for (std::array<int, 5>::size_type i{ 0 }; i < myArray.size(); ++i)
        std::cout << myArray[i] << ' ';

    std::cout << '\n';

    return 0;
}

还有其他实用的变形直接查看原文就好了,主要是使用 std::size_t 和不对数组手动索引。