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

Zero-initializing elements of a std::array with a default member initializer

本文关键字:array 元素 std 初始化 成员 默认      更新时间:2023-10-16

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

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这样的原始类型。

这个:

template<typename T, size_t N>
struct S {
   std::array<T,N> a = {};
};

这将递归复制初始化{}中的每个元素。对于int,这将初始化为零。当然,总有人可以写:

struct A {
    A() {}
    int i;
};

这将防止i被初始化。但那是在他们身上。

std::array是一种聚合类型。您可以使用空大括号{}聚合初始化它,这将相应地初始化std::array持有的内部T数组的元素。