为什么我必须为std::array分配一个大小,而一个普通数组却不必如此?
std::array<int, 3> foo = {1,2,3};
int bar[] = {1,2,3}; // the size is 3
对于普通数组,我不必分配大小。但我必须为std::array. 为什么?
回答
C++ 中的数组有一套独立于其他类型的规则。如果未指定大小,则可以从初始化程序中提供的参数数量推导出大小。
std::array 另一方面是类模板,因此在实例化该类型的对象时需要指定所有参数。
从 C++17 开始,此要求已放宽,因为编译器现在将执行类模板参数推导。所以现在你可以省略类型和大小,编译器会从初始化器中参数的类型和数量推导出它们:
std::array foo = {1,2,3}; // ok, int and 3
THE END
二维码