std::array 大括号如何初始化?

How does std::array brace initialize?

既然数组没有构造函数或析构函数,也没有public非静态成员变量,那么数组如何允许大括号初始化呢?不允许尝试初始化以下类型:

template<typename T, std::size_t num>
class Array
{
    T data[num];
};

我如何以一种无需任何构造函数或析构函数的大括号初始化的方式来编写此类型,以保持该类型可平凡地构造和破坏,并且不暴露私有数组成员?

std::array 的构造函数是隐式声明的

假设 std::array 定义为

template<
    class T,
    std::size_t N
> struct array;

它只包含一个成员,T[N],具有 public 访问权限。

因此,可以通过为聚合初始化编写适当的语法来初始化std::array,即使用大括号。