std::forward() 源码分析

std::forward能将一个参数原封不动(包括参数值、左/右值等)地传递给另一个函数,这叫完美转发

实现

std::forward实现如下:

template 
T&& forward(typename tinySTL::remove_reference::type& t) noexcept {
    return static_cast(t);
}

template 
T&& forward(typename tinySTL::remove_reference::type&& t) noexcept {
    return static_cast(t);
}

std::move一样,std::forward借助万用引用来实现完美转发。

t是左值引用时,此时推到得到T = X&,则T&&展开为X& &&,经过引用折叠后得到X&,即最后返回static_cast(t)

t是右值引用时,此时推到得到T = X&&,则T&&展开为X&& &&,经过引用折叠后得到X&&,即最后返回static_cast(t)

引用折叠技术可参考here

打广告

我“写”了一个低效的STL子集,放在Github上,欢迎大家交流指导。

参考

你可能感兴趣的:(c++,stl)