为什么`std :: pair`把`std :: tuple`作为ctor参数类型而不是`const std :: tuple&`?

xml*_*lmx 1 c++ optimization constructor parameter-passing c++11

C++ 11标准定义了std::pair如下构造函数:

template<class... Args1, class... Args2>
pair(std::piecewise_construct_t, std::tuple<Args1...> first_args,
     std::tuple<Args2...> second_args);
Run Code Online (Sandbox Code Playgroud)

为什么std::pair采用std::tuplector参数类型而不是const std::tuple&

如果复制first_args和second_args很重要怎么办?

Ker*_* SB 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'));
Run Code Online (Sandbox Code Playgroud)

这构造了对元素,好像是A(10, x, make())等等.

实际的元组类型std::tuple<int &&, Foo &, Z &&>等等,重量轻.