8

假设您有一个模板类的 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::array,从而避免存储中 Tps 的多余默认构造函数?在这种情况下是否可以利用 std::initializer_list<> ?

4

1 回答 1

3

不。

std::array是一个聚合,所以你没有像构造函数那样使用迭代器的特殊功能。(这实际上让我感到惊讶,std::initializer_list我认为创建其他有用的构造函数并没有什么坏处。也许还有一个问题。)

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

于 2010-07-22T17:50:27.140 回答