std::array
是一个有用的类,它在C堆栈数组上提供C ++ Container接口。
但为什么std::array
没有大多数容器的典型填充构造函数?相反,它有一个方法fill
。
在这方面,为什么std::array
在STL容器中是唯一的?
答案 0 :(得分:6)
从第23.3.2.1节:
数组是可以使用语法初始化的聚合(8.5.1) 数组a = {initializer-list};
如果它像std::vector
那样工作,它将不再是POD。另外,来自同一部分:
应满足总量(8.5.1)的条件。
这些条件是:
聚合是一个数组或类(第9条),没有用户提供的构造函数(12.1),没有大括号或平衡初始化器 对于非静态数据成员(9.2),没有私有或受保护的非静态数据成员(第11条), 没有基类(第10条),也没有虚函数(10.3)。
答案 1 :(得分:5)
是; std::array
意味着是一个聚合(C ++11§8.5.1),因此可以在可以使用普通数组的情况下使用尽可能多的上下文。聚合可以没有显式构造函数或析构函数。
答案 2 :(得分:3)
每个人都很好地解释了“为什么”我认为,所以我会提出一个解决方案建议,它应该编译成与原生构造函数一样好:
template< typename T, std::size_t n > std::array<T,n> filledArray( const T& v ) {
std::array<T,n> r;
r.fill( v );
return r;
}
auto arr = filledArray<int,4>( 7 );