我看到的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」。這是一個額外的過載。 –