Я вижу, что метод insert
std::map
и std::unordered_map
будет меняться от
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>
. Здесь два вопроса:
- Почему это изменение? Что такое потенциал роста?
- Как это будет работать, чтобы переместить ключ при вставке? Версия С++ 11 принимает что-либо (ограничение на
P
равноdefault_constructible<value_type, P&&>
), затемstd::pair<A, int>
- это большую часть времени, когда тип этого аргумента совпадает с типом, возвращаемымstd::make_pair
, и может вызовите конструктор перемещенияA
. Но в версии С++ 17 этот аргумент передается вvalue_type
, гдеA
является const, а затем не движется. A должен быть скопирован, если я не пропускаю что-то. Или С++ 17 что-то изменит с этой стороны?
Спасибо!