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

3

由于数组没有构造函数、析构函数和公有的非静态成员变量,那么它是如何允许花括号初始化的呢?尝试对以下类型进行初始化会被禁止:

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

我该如何写这种类型,使其可以使用大括号进行初始化,而不需要任何构造函数或析构函数来保持类型的可平凡构造和可平凡破坏状态,并且不暴露私有数组成员?
1个回答

5

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

假设std::array被定义为

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

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

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


1
我可以用什么方法重写我的类型以达到相同的效果? - Andreas Loanjoe
2
@AndreasLoanjoe - 将s/class/struct/,所有成员都需要是公共的才能构成一个聚合体。 - StoryTeller - Unslander Monica
@AndreasLoanjoe,是的,它存在,只是标准没有指定它的名称。这意味着您不能直接访问它并期望您的代码编译。 - rubenvb
我该如何做到相同的事情? - Andreas Loanjoe
@AndreasLoanjoe:在你的类中用struct替换class - Bathsheba
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接