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上,欢迎大家交流指导。

参考


chenBright
817 声望57 粉丝

学习算法、C++、linux…