Выбор ответа Junior Move-семантика спрашивают часто обновлено
Что делает std::move
Вопрос
Что на самом деле делает std::move(x)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Приводит x к rvalue-ссылке, сам ничего не перемещает. std::move это staticcast<std::removereferencet<T&&(x).
Варианты ответа
- Перемещает содержимое
xв новый объект и возвращает его - Обнуляет
x, оставляя его в пустом состоянии - Приводит
xк rvalue-ссылке, сам ничего не перемещаетправильный ответ - Копирует
xв кучу и возвращает указатель на копию
Разбор
std::move это static_cast<std::remove_reference_t<T>&&>(x). Перемещение выполнит перемещающий конструктор или присваивание, которое выберется благодаря приведению. Если такого нет (или объект const), сработает копирование.
- Сам по себе вызов
std::move(x);без использования результата ничего не меняет. - Обнуление источника, если и происходит, делает перемещающий конструктор.
- Куча здесь ни при чём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Move-семантика»
- Перенос между складами: map::extract без копий
- Топ участников: сортировка записей без копий строк
- lvalue, prvalue, xvalue
- std::move от const-объекта
- push_back и emplace_back
- std::exchange в перемещении
- Объясни move-семантику
- Допишите обёртку с perfect forwarding