【发布时间】:2013-08-20 11:23:45
【问题描述】:
std::tuple 包含以下构造函数:
explicit tuple( const Types&... args );
template< class... UTypes >
explicit tuple( UTypes&&... args );
两者都有相同的描述,因为它们用args 中的对应值初始化每个元素。唯一的区别是第二个参数是转发的。
根据我对右值引用的理解,我不明白为什么需要第一个版本,因为可以将相同的参数传递到第二个版本。引用将被转发,没有人会更明智,尤其是因为没有提到移动语义。
谁能解释一下是什么让这两个构造函数都必需?
【问题讨论】:
-
如果不是所有
UTypes都可以隐式转换为相应的Types,则第二个版本是 SFINAE-d 超出重载集
标签: c++ c++11 rvalue-reference stdtuple