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 和不对数组手动索引。