由于数组没有构造函数、析构函数和公有的非静态成员变量,那么它是如何允许花括号初始化的呢?尝试对以下类型进行初始化会被禁止:
template<typename T, std::size_t num>
class Array
{
T data[num];
};
我该如何写这种类型,使其可以使用大括号进行初始化,而不需要任何构造函数或析构函数来保持类型的可平凡构造和可平凡破坏状态,并且不暴露私有数组成员?
由于数组没有构造函数、析构函数和公有的非静态成员变量,那么它是如何允许花括号初始化的呢?尝试对以下类型进行初始化会被禁止:
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
。
s/class/struct/
,所有成员都需要是公共的才能构成一个聚合体。 - StoryTeller - Unslander Monicastruct
替换class
。 - Bathsheba