面试真题

C++ · 中等 · 网易

std::move与std::forward的区别

中等 C++ 🎤 网易
参考答案
结论:std::move无条件将实参转为右值引用以触发移动语义;std::forward完美转发,保留实参原值类别。原理:move本质是static_cast<T&&>(t),仅类型转换不移动数据;forward利用引用折叠:模板参数T若为左值引用则返回左值,否则返回右值。示例:template<typename T> void wrap(T&& x){ func(std::forward<T>(x)); } 传左值,T推导为左值引用,forward转左值;传右值,T为非引用,转右值。区别:move用于资源转移,forward用于模板参数传递避免拷贝。
题目整理自公开面经,答案由校招宝自研生成,仅供参考