加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

std :: map :: insert change in C 17

发布时间:2020-12-12 16:54:27 所属栏目:MsSql教程 来源:网络整理
导读:我看到std :: map和std :: unordered_map的insert方法将会从中更改 templateclass P std::pairiterator,bool insert(P value); (C++11) 至 std::pairiterator,bool insert(value_type value); (C++17) 但是,对于这些容器,value_type是std :: pair A const,int
我看到std :: map和std :: unordered_map的insert方法将会从中更改
template<class P> std::pair<iterator,bool> insert(P&& value); (C++11)

std::pair<iterator,bool> insert(value_type&& value);  (C++17)

但是,对于这些容器,value_type是std :: pair< A const,int>.这里有两个问题:

为什么这个变化?有什么好处?
>如何在插入时移动键? C 11版本接受任何东西(P上的约束是default_constructible< value_type,P&&&>),然后是std :: pair< A,int> – 这个参数的大部分时间是std :: make_pair返回的参数的类型,并且可以调用A的移动构造函数.但是在C 17版本中,此参数被转换为value_type,其中A是const,然后不动.必须复制A,如果我不能忽视某事.还是C 17改变任何一方呢?

谢谢!

解决方法

在C 17中添加了一个附加的非模板重载插入.

这种重载的优点在于它允许基于语法 – {}的.insert({{key},{value,args}}).模板参数不能通过{}基于构造指令而没有显式类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读