【问题标题】:On the initialization of std::array [duplicate]关于 std::array 的初始化 [重复]
【发布时间】:2011-03-19 16:37:35
【问题描述】:

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

【问题讨论】:

  • 顺便提一下,保留以下划线开头后跟大写字母的标识符。另外,它应该是std::distance(first, last)
  • 监督已修复。额外的默认构造函数的问题仍然存在......

标签: c++ c++11 tr1


【解决方案1】:

没有。

std::array 是一个聚合,因此您不会获得像构造函数采用迭代器这样的特殊功能。 (这实际上让我感到惊讶,随着std::initializer_list 的引入,我认为创建其他有用的构造函数没有什么害处。也许还有一个问题。)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 2015-10-05
    • 1970-01-01
    • 2012-02-10
    • 2015-09-04
    • 2014-03-31
    • 2021-12-09
    • 2021-03-19
    相关资源
    最近更新 更多