據my previous question's answer,超載的std :: unordered_map ::插入的重載
std::pair<iterator, bool> std::unordered_map::insert(const value_type&)
比
template<class P>
std::pair<iterator, bool> std::unordered_map::insert(P&&)
對於某些情況類似
std::unordered_map<std::string, int> v;
v.insert({"key", 1});
有用的,因爲編譯器不能推斷P
從{"key", 1}
。 (感謝sellibitze)
然而,雖然這種說法{"key", 1}
(= )是prvalue,它不能因爲參數類型爲const value_type&
移動到容器中。
我的問題是---我很遺憾要堅持---爲什麼標準選擇const value_type&
作爲參數類型而不是value_type&&
?或者,是否還有其他原因存在參數類型爲const value_type&
的函數存在,並且參數類型爲value_type&&
的函數不存在?
編輯: 我創建了一個示例。
- 使用參數類型
const value_type&
像unordered_map:http://ideone.com/GB72fc。 - 僅使用參數類型
value_type&&
:http://ideone.com/dXnQJr。 - 使用兩種參數類型:http://ideone.com/shAb9e。
'insert'缺少'value_type &&'重載可能是一個疏忽,就像'make_unique'一樣。 – Xeo
「make_unique」的缺失也是故意的。雖然我不反對它在未來的標準。對於C++ 11來說,'unique_ptr'中沒有足夠的專家來回答這樣的問題:你如何處理定製的刪除器?數組類型?我分散得太薄而無法推動它。 –
如果你關心性能,你可能想使用emplace - 可能使用pair的「pairwise constructor」。 – sellibitze