std::forward
能将一个参数原封不动(包括参数值、左/右值等)地传递给另一个函数,这叫完美转发。
实现
std::forward
实现如下:
template <class T>
T&& forward(typename tinySTL::remove_reference<T>::type& t) noexcept {
return static_cast<T&&>(t);
}
template <class T>
T&& forward(typename tinySTL::remove_reference<T>::type&& t) noexcept {
return static_cast<T&&>(t);
}
和std::move
一样,std::forward
借助万用引用来实现完美转发。
当t
是左值引用时,此时推到得到T = X&
,则T&&
展开为X& &&
,经过引用折叠后得到X&
,即最后返回static_cast<X&>(t)
。
当t
是右值引用时,此时推到得到T = X&&
,则T&&
展开为X&& &&
,经过引用折叠后得到X&&
,即最后返回static_cast<X&&>(t)
。
引用折叠技术可参考here。
打广告
我“写”了一个低效的STL子集,放在Github上,欢迎大家交流指导。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。