Выбор ответа Junior Move-семантика спрашивают часто обновлено

Что делает std::move

Вопрос

Что на самом деле делает std::move(x)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Приводит x к rvalue-ссылке, сам ничего не перемещает. std::move это staticcast<std::removereferencet<T&&(x).

Варианты ответа

  1. Перемещает содержимое x в новый объект и возвращает его
  2. Обнуляет x, оставляя его в пустом состоянии
  3. Приводит x к rvalue-ссылке, сам ничего не перемещаетправильный ответ
  4. Копирует x в кучу и возвращает указатель на копию

Разбор

std::move это static_cast<std::remove_reference_t<T>&&>(x). Перемещение выполнит перемещающий конструктор или присваивание, которое выберется благодаря приведению. Если такого нет (или объект const), сработает копирование.

  • Сам по себе вызов std::move(x); без использования результата ничего не меняет.
  • Обнуление источника, если и происходит, делает перемещающий конструктор.
  • Куча здесь ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.