Что выведет код Middle Move-семантика обновлено
Что выведет: std::move и const
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <iostream>
#include <utility>
struct S {
S() = default;
S(const S&) { std::cout << "copy\n"; }
S(S&&) noexcept { std::cout << "move\n"; }
};
int main() {
const S a;
S b = std::move(a);
S c;
S d = std::move(c);
S&& r = std::move(d);
S e = r;
S f = std::move(r);
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: copy, move, copy, move. std::move(a) даёт const S&&, подходит только копирующий конструктор. std::move(c) даёт S&&: перемещение. r это именованная rvalue-ссылка, то есть lvalue: S e = r копирует. std::move(r) снова rvalue: перемещение.
Что выведет
copy
move
copy
move
Разбор
std::move(a) даёт const S&&, подходит только копирующий конструктор. std::move(c) даёт S&&: перемещение. r это именованная rvalue-ссылка, то есть lvalue: S e = r копирует. std::move(r) снова rvalue: перемещение.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Состояние после перемещения
Следующий вопрос
Что выведет: push_back против emplace_back
Ещё по теме «Move-семантика»
- Перенос между складами: map::extract без копий
- Топ участников: сортировка записей без копий строк
- lvalue, prvalue, xvalue
- std::move от const-объекта
- push_back и emplace_back
- std::exchange в перемещении
- Объясни move-семантику
- Допишите обёртку с perfect forwarding