使用默认成员初始值设定项初始化std :: array的元素

And*_*zos 13 c++ c++17

假设我有一个这样的类模板:

template<typename T, size_t N>
struct S {
   std::array<T,N> a;
};
Run Code Online (Sandbox Code Playgroud)

是否有我可以放置的默认成员初始化程序a,

template<typename T, size_t N>
struct S {
   std::array<T,N> a = ???;
};
Run Code Online (Sandbox Code Playgroud)

这样,无论是什么T,都a将永远初始化元素(永远不会有不确定的价值)?即,即使T是原始类型int.

Bar*_*rry 19

这个:

template<typename T, size_t N>
struct S {
   std::array<T,N> a = {};
};
Run Code Online (Sandbox Code Playgroud)

这将以递归方式复制初始化每个元素{}.因为int,这将零初始化.当然,有人总能写:

struct A {
    A() {}
    int i;
};
Run Code Online (Sandbox Code Playgroud)

这将阻止i初始化.但那就是他们.


Jan*_*ans 7

std::array是一种聚合类型.可以聚集与空括号初始化它{},这将相应地初始化的内部阵列的元件Tstd::array成立.