为什么我必须为 std::array 分配一个大小,而普通数组不必如此?

Why do I have to assign a size for a std::array, when a plain array doesn't have to be?

std::array<int, 3> foo = {1,2,3};
int bar[] = {1,2,3}; // the size is 3

对于普通数组,我不必指定大小。但我必须为 std::array 分配大小。为什么?

C++ 中的数组有一套不同于其他类型的规则。如果未指定大小,则可以从初始化程序中提供的参数数量推导出大小。

另一方面,

std::array 是一个 class 模板,因此在实例化该类型的对象时需要指定所有参数。

从 C++17 开始,此要求已放宽,因为编译器现在将执行 class-template-argument-deduction。所以现在你可以省略类型和大小,编译器将从初始化程序中的参数类型和数量推导出它们:

std::array foo = {1,2,3};  // ok, int and 3