std::tuple
包含,除其他外,以下的构造:所有的std :: tuple构造函数都是必需的吗?
explicit tuple(const Types&... args);
template< class... UTypes >
explicit tuple(UTypes&&... args);
两者在它们初始化每个与args
对应的值的元素等效的描述。唯一的区别是在第二个参数被转发。
从我对rvalue引用的理解中,我不明白为什么第一个版本是必需的,因为可以将相同的参数传递到第二个版本。这些引用将被转发,没有人会更聪明,尤其是没有提到移动语义。
任何人都可以解释它是什么使得两个构造函数都是必需的吗?
第二个版本是SFINAE-d出过载如果不是全部设置的'UTypes'是隐式转换为对应的'Types' – jrok