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