重载std :: unordered_map :: insert的重载

时间:2013-02-07 17:59:43

标签: c++ c++11

根据my previous question's answer

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}。 (谢谢sellibitze

但是,尽管此参数{"key", 1}(= std::pair<std::string, int>("key", 1))是prvalue,但它无法移动到容器,因为参数类型为const value_type&

我的问题是 - 我很抱歉坚持不懈 - 为什么标准选择const value_type&作为参数类型而不是value_type&&?或者,是否存在参数类型const value_type&的函数存在且参数类型为value_type&&的函数不存在的任何其他原因?

编辑: 我创建了一个样本。

1 个答案:

答案 0 :(得分:4)

value_type&&)(insertunordered_ multi的“缺失”map重叠是故意的。 value_typepair<const key_type, value_type>。移动语义游行中const key_type几乎下雨了。

我真的想允许从pair<key_type, value_type>转移,从而引入P&&重载。事后看来,这可能不是最好的解决方案。然而,这是一个深思熟虑的设计决定。

在作出决定时,尚未提出统一初始化提案。因此,在标准化之前从未彻底调查过与之相互作用(只是没有足够的时间/人力)。

const value_type&重载来自C ++ 98,从来不会考虑删除或修改它。