Şablon genel referans aşırı yükü n1858, mantık ile eklenmiştir (map
için, ancak aynı açık multimap
için geçerlidir):
Two of the insert
signatures are new. They have been added to allow moving from rvalue types other than value_type
, which are convertible to value_type
. When P
instantiates as an lvalue, the argument is copied into the map
, else it is moved into the map
(const qualifiers permitting).
(diğer
insert
imza eklemek-ile-ipucu olduğunu anılacaktır.)
Ayrıca
deque
için gerekçe bakınız
(yine açıkça diğer konteynerler için başvurulan):
All member functions which insert (or append, prepend, etc.) a single value_type into the container are overloaded with a member function that accepts that value_type by rvalue reference so that single value_type's can be moved into the container. This not only makes working with heavy weight types much more efficient, it also allows one to insert movable but non-copyable types into the container.
Değişikliklerin esas olarak eklemeler olarak kabul edildiğini; şablon aşırı yükünün orijinal (C++ 03) insert
yerine tamamen yerleştirilebileceği düşünülmedi. Bu farklı bir yaklaşımla, şablon aşırı için bazı motivasyon sağlar önceki n1771, bakarak görülebilir: (. CC
CopyConstructible
kısaltmasıdır)
Note below that for map and multimap that there are two new insert overloads, both taking a pair with a non-const key_type. One can not move from a const key_type, and therefore to be able to move a key_type into the (multi)map, a pair must be used. There are overloads for both a const lvalue pair, and a non-const rvalue pair so that lvalue pair's will not be moved from.
pair<iterator, bool> insert(const value_type& x); // CC
pair<iterator, bool> insert(const pair<key_type,mapped_type>& x); // CC
pair<iterator, bool> insert(pair<key_type,mapped_type>&& x);
Sonra anlaşılıyor template
aşırı yüklemeleri, const value_type &
aşırı yüklerini gereksiz yaptıklarının farkında olmadan map
ve multimap
'a eklenmiştir. Yedek aşırı yüklenmelerin kaldırılması için bir kusur raporu göndermeyi düşünebilirsiniz. Bu aşırı
auto std::unordered_map::insert(const value_type&) -> ...
template<class P>
auto std::unordered_map::insert(P&&) -> ...
ait
Sessizlik ........ –
Muhtemelen TR1'den miras. Belki de güvenli olmak istediler ve işlevleri kaldırmayıp sadece onları eklediler. Belki de TR1 kullanılan mevcut kod üzerindeki etki anında kesin değildi. –
bir [programı] oluşturmak için güvenilir (http://liveworkspace.org/code/4y16As$46) 'm kaldırmak (const VALUE_TYPE &) eklemek halinde derlenmeyecektir bu 've başarısız oldu. Kimsenin düşünceleri var mı? – Yakk