std::move和std::forward
move和forward不进行任何操作,他们只负责类型转换。
move(x)等价于 static_cast<remove_reference_t<T>&&>(x)。因为T首先被剥夺引用,因此这里不会产生引用折叠,必定返回右值。
forward(x)等价于 static_cast<T&&> (x)。因为引用折叠,如果x是右值,返回右值;是左值,则返回左值。
应用场景:
1. copy constructor / assignment
2. move constructor / assignment
forward解决了完美转发;能够自行判断使用copy 还是Move。一定程度上forward可以代替move;但是Move更清晰,所以是move语义就应该用move。
C++ std::move and std::forward (bajamircea.github.io)
Implementation Challenge: Replacing std::move and std::forward (foonathan.net)