参考答案
结论: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用于模板参数传递避免拷贝。