C++ geek

@channel_cpp_geek
std::move vs std::forward: когда и что использовать Сегодня покажу вам коротко, чем отличаются std::move и std::forward. - std::move(obj) — безусловно превращает объект в rvalue. После этого объект считается "пустым" для повторного использования (в рамках контракта move). Используем, когда мы точно хотим "забрать" ресурсы. - std::forward<T>(obj) — условно делает rvalue, если изначально пришёл rvalue. То есть это "perfect forwarding" для шаблонных функций. Пример: #include <utility> #include <string> #include <iostream> template <typename T> void wrapper(T&& arg) { process(std::forward<T>(arg)); // сохраняет rvalue/lvalue-семантику } void process(const std::string& s) { std::cout << "Lvalue: " << s << '\n'; } void process(std::string&& s) { std::cout << "Rvalue: " << s << '\n'; } int main() { std::string str = "Hello"; wrapper(str); // Lvalue wrapper(std::move(str)); // Rvalue } Запомните: - std::move - "забрать". - std::forward - "передать как есть".
Если у вас установлено приложение,
вы можете сразу перейти в канал