根据我之前的问题的回答,
std::pair<iterator, bool> std::unordered_map::insert(const value_type&)
比有用
template<class P>
std::pair<iterator, bool> std::unordered_map::insert(P&&)
对于某些情况,例如
std::unordered_map<std::string, int> v;
v.insert({"key", 1});
因为编译器无法P
从{"key", 1}
. (感谢出售)
然而,虽然这个参数{"key", 1}
(= std::pair<std::string, int>("key", 1)
) 是纯右值,但它不能移动到容器中,因为参数类型是const value_type&
。
我的问题是——我很抱歉坚持不懈——为什么标准选择const value_type&
参数类型而不是value_type&&
?const value_type&
或者,是否存在具有参数类型的函数而具有参数类型的函数value_type&&
不存在的任何其他原因?
编辑:我创建了一个示例。
const value_type&
使用unordered_map之类的参数类型:http: //ideone.com/GB72fc。- 仅使用参数类型:http
value_type&&
: //ideone.com/dXnQJr。 - 两种参数类型:http: //ideone.com/shAb9e。