2017-01-16 3 views

ответ

6

Это нормально?

foo.emplace_back(std::move(bar));

Да, потому что:

  1. std::move(bar) бросает bar к ссылке RValue.

  2. std::list::emplace_back принимает любое количество forwarding references и использует их для построения элемента в конце.

  3. std::vector::vector имеет перегрузку (6) который принимает ссылку RValue, который перемещает содержимое RHS вектор без выполнения какой-либо копии.

5

Да, код в Q, безусловно, в порядке. Даже при использовании push_back будет хорошо:

foo.push_back(std::move(bar)); 
+4

Лично я считаю, что 'push_back' должен быть предпочтительным в этом случае. Я думаю, что это яснее. –

4

Как я должен двигаться bar до конца foo без копирования данных?

Использование перемещения конструктора std::vector:

foo.push_back(std::move(bar)); 

ли это нормально?

foo.emplace_back(std::move(bar)); 

Это нормально, как хорошо.

Смежные вопросы