DrY*_*Yap 6 c++ rvalue-reference c++11 stdtuple
std::tuple
包含以下构造函数:
explicit tuple( const Types&... args );
template< class... UTypes >
explicit tuple( UTypes&&... args );
Run Code Online (Sandbox Code Playgroud)
两者都有相同的描述,因为它们用相应的值初始化每个元素args
.唯一的区别是在第二个参数被转发.
根据我对rvalue引用的理解,我不明白为什么第一个版本是必需的,因为相同的参数可以传递到第二个版本.引用将被转发,没有人会更聪明,特别是因为没有提到移动语义.
任何人都可以解释是什么让两个构造函数都必要吗?
nos*_*sid 10
这是一个简化的例子:
template <typename T>
struct foo
{
foo(const T&);
template <typename U>
foo(U&&);
};
Run Code Online (Sandbox Code Playgroud)
第二个构造函数需要某种模板类型推导.这并不适用于所有情况,例如初始化列表.如果第一个构造函数可用,则以下初始化仅起作用:
auto f = foo<std::vector<int>>{ { 1, 2, 3 } };
Run Code Online (Sandbox Code Playgroud)