私の前の質問の答えによると、
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}
(= std::pair<std::string, int>("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。