Lew*_*man 5 c++ stl language-lawyer c++11 forwarding-reference
来自 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
Run Code Online (Sandbox Code Playgroud)
我似乎找不到任何理由为什么第一个构造函数应该与完美转发构造函数一起定义。完美的转发构造函数是否足以处理复制、移动两种情况?在哪种情况下,第一个构造函数在重载决议中获胜?
在什么情况下第一个构造函数在重载决策中获胜?
std::pair当传递与、 ieconst T1和的成员具有完全相同类型的 const 左值时,它会获胜const T2。两个构造函数都是完全匹配的,非模板构造函数会获胜。例如
const int i = 0;
const int j = 0;
std::pair<int, int> p(i, j);
Run Code Online (Sandbox Code Playgroud)
从 C++11 开始添加了接受转发引用的构造函数,我认为保留第一个构造函数只是为了保持一致性。