【问题标题】:How does std::array brace initialize?std::array 大括号如何初始化?
【发布时间】:2019-11-20 14:31:22
【问题描述】:

由于数组没有构造函数或析构函数,也没有公共的非静态成员变量,数组如何允许大括号初始化?不允许尝试初始化以下类型:

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

我如何编写这种类型,使其在没有任何构造函数或析构函数的情况下可以大括号初始化,以保持该类型可构造和可破坏,并且不暴露私有数组成员?

【问题讨论】:

    标签: c++ arrays list-initialization


    【解决方案1】:

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

    假设std::array被定义为

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

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

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

    【讨论】:

    • 我可以通过什么方式重写我的类型来做同样的事情?
    • @AndreasLoanjoe:您的会员是private(抱歉,这是我的回答中缺少的重要部分)。
    • @AndreasLoanjoe - s/class/struct/ 所有成员都需要公开才能构成聚合。
    • std::array的成员怎么不公开?
    • @AndreasLoanjoe - 但确实如此。它必须是一个聚合。
    猜你喜欢
    • 2015-02-24
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    相关资源
    最近更新 更多