gpt4 book ai didi

c++ - std::unordered_map::insert 重载重载

转载 作者:行者123 更新时间:2023-11-30 02:00:49 24 4
gpt4 key购买 nike

根据 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) ) 是纯右值,它不能移动到容器,因为参数类型是 const value_type& .

我的问题是 --- 很抱歉我太执着了 --- 为什么标准选择 const value_type&对于参数类型而不是 value_type&& ?或者,是否有任何其他原因导致参数类型为 const value_type& 的函数存在且参数类型为 value_type&& 的函数不存在?

编辑:我创建了一个示例。

最佳答案

“失踪”value_type&&过载 insert对于 ( unordered_ )( multi ) map是故意的。 value_typepair<const key_type, value_type> . constkey_type 上移动语义游行几乎下雨了。

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

做出该决定时,尚未提出统一的初始化建议。因此,在标准化之前从未彻底研究过与之交互的问题(只是时间/人力不足)。

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

关于c++ - std::unordered_map::insert 重载重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com