1. “是什么?”
虽然 std::move()
从技术角度上是一个函数 ,但我认为它不是真正的函数。 它是编译器考虑表达式值的方式之间的转换器。
2. “有何用?”
首先要注意的是 std::move()
实际上没有移动任何东西。 它将表达式从左值(例如以及命名的变量)更改为 xvalue
。 xvalue
告诉编译器:
你可以掠夺我,移动我持有的任何东西并在别处使用它(因为我很快就会被摧毁)”。
换句话说,当您使用 std::move(x) 时,您允许编译器蚕食 x。 因此,如果 x
在内存中有自己的缓冲区,在 std::move()
之后,编译器可以让另一个对象拥有它。
您也可以从prvalue移动(例如您正在传递的临时值),但这很少有用。