关于std :: array的初始化

Nic*_*lli 8 c++ tr1 c++11

假设你有一个模板类的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;

};
Run Code Online (Sandbox Code Playgroud)

假设您提供了与存储大小相同的范围,是否可以在构造函数初始化程序中初始化std :: array,从而避免存储中Tps的超级默认构造函数?在这种情况下是否可以利用std :: initializer_list <>?

GMa*_*ckG 3

不。

std::array是一个聚合,因此您不会获得像采用迭代器的构造函数这样的特殊功能。(这实际上让我感到惊讶,因为std::initializer_list我认为制作其他有用的构造函数没有什么坏处。也许有一个问题正在酝酿之中。)

这意味着使用迭代器在数组内复制数据的唯一方法是迭代,并且要做到这一点,必须array已经构造好并准备好使用。