佈設我不知道如果我理解正確的驗證碼地圖動與左值
template<typename M>
void add(M& m,int i, std::string s)
{
m.emplace(i,std::move(s));
}
int main()
{
std::map<int,std::string> m;
add(m,1,"foo");
}
當add
被調用時,std::string
和int
被複制。方法emplace
構造一個std::pair
它被移動到std::map
(不需要複製)。但是int
的副本是一個左值,而std::string
的副本被轉換爲右值,因此調用哪個構造函數來構造std::pair
?由於一個論點不能被移動,我想在這裏有一個額外的副本。這樣對嗎?很明顯,如果我還將int
的副本也投給了右值,我預計不會有額外的副本。
所以'std :: pair'構造了複製'int'並移動了'std :: string'的權利? –
@MarcoAgnese正確 – imreal