Что такое multimap:: emplace() и move()?

Я просматривал документ MSDN о multimap и обнаружил, что у него есть функция-член multimap:: emplace(). Ниже приведен пример этой функции-члена.

int main( ) {
   using namespace std;
   multimap<int, string> m1;
   pair<int, string> is1(1, "a");

   m1.emplace(move(is1));
}

Кажется, что emplace() и move() - С++ 0x. Может кто-нибудь объяснить их мне? Я читал о move(), но я действительно не понимаю, что он делает (под капотом).

Ответ 1

Вытеснение легче понять с помощью векторов. my_vector.emplace_back(1, 2, 3) - это в основном эффективный ярлык для my_vector.push_back(some_type(1, 2, 3)). Вместо того, чтобы копировать объект на месте, любой конструктор теперь можно использовать для построения на месте, тем самым сохраняя создание, копирование (или перемещение) и уничтожение временного объекта. Внедрение происходит от совершенной пересылки.

std::move(expression) - это в основном приведение к xvalue, которое эффективно позволяет привязать все выражение к ссылке rvalue. Вы обычно делаете это, чтобы включить кражи ресурсов из именованных объектов, которые вас больше не интересуют, потому что они скоро будут уничтожены.