我看到的std::map
和std::unordered_map
的insert
方法将改变从的std ::在地图::插入件变化C++ 17
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
是常量,然后是不可移动的。如果我没有忽视某些东西,A必须被复制。或者C++ 17是否也改变了这方面的任何东西?
谢谢!
看起来这个功能是由[LWG 2354](http://wg21.link/lwg2354)添加的。 –
它不是“从X到Y”。这是一个额外的过载。 –