在没有赋值的情况下调用 std::move() 时会发生什么
What happens when std::move() is called without assignment
如果我只使用 std::move
而没有任何赋值会怎样?
std::string s = "Moving";
std::move(s); //What happens on this line to s?
//is s still valid here?
std::move()
不会自己移动传递的对象;它只是可能为对象启用移动语义。它由一个强制转换组成,您可以将其结果用于 select - 如果可能的话 - 支持移动语义的适当重载。因此,在您的代码中:
std::string s = "Moving";
std::move(s);
上面的 std::move(s)
将 s
转换为 右值引用 。不使用铸造的结果。上面的对象s
实际上并没有移动,也没有被修改。
如果我只使用 std::move
而没有任何赋值会怎样?
std::string s = "Moving";
std::move(s); //What happens on this line to s?
//is s still valid here?
std::move()
不会自己移动传递的对象;它只是可能为对象启用移动语义。它由一个强制转换组成,您可以将其结果用于 select - 如果可能的话 - 支持移动语义的适当重载。因此,在您的代码中:
std::string s = "Moving";
std::move(s);
上面的 std::move(s)
将 s
转换为 右值引用 。不使用铸造的结果。上面的对象s
实际上并没有移动,也没有被修改。