在完美转发中,std::forward用于转换命名的右值引用t1和t2未命名的右值引用.这样做的目的是什么?inner如果我们离开t1&t2作为左值,那将如何影响被调用的函数?
template <typename T1, typename T2>
void outer(T1&& t1, T2&& t2)
{
inner(std::forward<T1>(t1), std::forward<T2>(t2));
}
Run Code Online (Sandbox Code Playgroud) 据我所知,std::forward<T>(x)相当于static_cast<T&&>(x).
但是从我所看到的,static_cast<T>(x)似乎做同样的事情,如下面的代码所示
我的问题是为什么不出std::forward<T>被实现为static_cast<T&&>(x),而不是static_cast<T>(x),如果两者都具有相同的效果?
对于下面的代码,我们如何使用 std::forward 转发函数自动参数?
void push_value(std::vector<MyType>& vec, auto&& value)
{
vec.emplace_back(std::forward<?>(value));
}
Run Code Online (Sandbox Code Playgroud)