C ++ 11标准定义了std::pair
的构造函数,如下所示:
template<class... Args1, class... Args2>
pair(std::piecewise_construct_t, std::tuple<Args1...> first_args,
std::tuple<Args2...> second_args);
为什么std::pair
将std::tuple
作为ctor参数类型而不是const std::tuple&
?
复制first_args和second_args会怎么样?
答案 0 :(得分:6)
目的是让那些元组成为引用的元组,由std::forward_as_tuple
创建:
Foo x;
Bar y(1, 2, true);
std::pair<A, B> p(std::piecewise_construct,
std::forward_as_tuple(10, x, make()),
std::forward_as_tuple(std::move(y), false, get(), 'a'));
这通过A(10, x, make())
等构建对元素。
实际的元组类型是std::tuple<int &&, Foo &, Z &&>
等,它们很轻。