如何解决为什么std :: pair的const引用和Forwarding引用参数都有两个不同的构造函数?
根据ISO标准(精确来说是N4860)std::pair
简介:
constexpr explicit(see below) pair(const T1& x,const T2& y); // first constructor
template<class U1,class U2>
constexpr explicit(see below) pair(U1&& x,U2&& y); // second constructor
我似乎找不到任何理由将第一个构造函数与完善的转发构造函数一起定义。完美的转发构造函数不足以同时处理复制和移动案例吗?在哪种情况下,第一个构造函数会赢得重载解析?
解决方法
在哪种情况下第一个构造函数在重载解析中获胜?
当通过与std::pair
的成员(即const T1
和const T2
的成员完全相同类型的const左值传递时,它会获胜。两种构造函数都是完全匹配的,非模板构造函数将获胜。例如
const int i = 0;
const int j = 0;
std::pair<int,int> p(i,j);
自C ++ 11起添加了采用转发引用的构造函数,我认为第一个保留是为了保持一致性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。