std::move和std::forward

发布时间 2023-07-29 16:05:55作者: xuyv

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)