C++ 开发与语法
理解 std::move、右值引用和移动构造
用所有权转移解释移动语义,并避免误用 moved-from 对象。
原理
std::move 本身不会移动任何数据,它把表达式转为可匹配移动重载的形式。真正的资源转移发生在随后调用的移动构造或移动赋值里。
开发中的做法
移动后的标准库对象通常处于有效但未指定的状态。可以销毁或重新赋值,读取原有值则需要查该类型的具体保证。
验证与追问
能直接返回局部对象时写 return value。对同一个局部对象写 return std::move(value) 可能阻止命名返回值优化。
代码片段
std::string source = "hello";
std::string target = std::move(source);
source = "usable again";