代码之家  ›  专栏  ›  技术社区  ›  Nicola Bonelli

关于std::array[duplicate]的初始化

  •  8
  • Nicola Bonelli  · 技术社区  · 14 年前

    假设您有一个模板类的c++0x std::array成员,并且您希望通过一个包含两个迭代器的构造函数来初始化它:

    template <typename Tp, size_t N>
    class Test 
    {
    public:
        template <typename Iterator>
        Test(Iterator first, Iterator last)
        {
            if (std::distance(first,last) > N )
                throw std::runtime_error("bad range");
            std::copy(first, last, _M_storage.begin());
        }
    
    private:
        std::array<Tp, N> _M_storage;
    
    };
    

    假设您提供的范围与存储的大小一致,是否可以在构造函数初始值设定项中初始化std::数组,从而避免存储中Tps的超级默认构造函数?是否可以利用std::initializer\u list<&燃气轮机;在这种情况下?

    1 回复  |  直到 14 年前
        1
  •  3
  •   GManNickG    14 年前

    不。

    std::array 是一个聚合,因此您没有像构造函数获取迭代器那样的特殊功能(这实际上让我很惊讶,因为 std::initializer_list 我认为做其他有用的构造器没有坏处。也许有个问题要问。)

    这意味着使用迭代器在数组中复制数据的唯一方法是迭代,并且 array 必须已经建造好并可以使用。