首页 > 解决方案 > 在没有赋值的情况下调用 std::move() 会发生什么

问题描述

当我std::move没有任何分配就使用时会发生什么?

std::string s = "Moving";
std::move(s);  //What happens on this line to s?
//is s still valid here?

标签: c++c++11move-semanticsstdmove

解决方案


std::move()不会自行移动传递的对象;它只是可能为对象启用移动语义。它由一个转换组成,您可以使用它的结果来选择(如果可能的话)支持移动语义的适当重载。因此,在您的代码中:

std::string s = "Moving";
std::move(s);

std::move(s)以上转换s右值引用。不使用铸造的结果。上面的对象s实际上并没有被移动,也没有被修改。


推荐阅读