std :: map :: insert change in C 17

前端之家收集整理的这篇文章主要介绍了std :: map :: insert change in C 17前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我看到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}}).模板参数不能通过{}基于构造指令而没有显式类型.

猜你在找的MsSQL相关文章