[英]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>
。 這里有兩個問題:
P
上的約束是default_constructible<value_type, P&&>
),然后是std::pair<A, int>
- 這是大多數時候這個參數的類型,因為它是返回的by std::make_pair
- 並且可以調用A
的移動構造函數。 但是在C ++ 17版本中,這個參數被轉換為value_type
,其中A
是const,然后是不可移動的。 如果我沒有忽略某些東西,則必須復制。 或者C ++ 17也改變了這方面的任何東西? 謝謝!
附加的非模板過載到insert
在C ++ 17中的溶液。
這樣的重載具有以下優點:它允許.insert( { {key}, {value, args} } )
基於語法 - {}
的構造。 template
參數不能傳遞{}
基礎建設的指示沒有明確的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.