假设我有一个这样的类模板:
template<typename T, size_t N>
struct S {
std::array<T,N> a;
};
我可以在a
上放置默认成员初始化程序吗,
template<typename T, size_t N>
struct S {
std::array<T,N> a = ???;
};
使得无论T
是什么,a
的元素都将始终被初始化(永远不会有不确定的值)?也就是说,即使T
是像int
这样的原始类型。
答案 0 :(得分:19)
此:
template<typename T, size_t N>
struct S {
std::array<T,N> a = {};
};
这将递归copy-initialize each element from {}
。对于int
,它将初始化为零。当然,有人总是可以写:
struct A {
A() {}
int i;
};
这将阻止i
初始化。但这就是他们。
答案 1 :(得分:6)
std::array
是聚合类型。您可以使用空括号{}
对其进行聚合初始化,这将相应地初始化T
所保存的std::array
内部数组的元素。