我真的很好奇 - 为什么std::forward
需要显式模板参数?难道不能简单
template<typename T> T forward(T&& ref) {
return ref;
}
如果可能的话,我真的很喜欢所有相关的细节,而不是简化。
我真的很好奇 - 为什么std::forward
需要显式模板参数?难道不能简单
template<typename T> T forward(T&& ref) {
return ref;
}
如果可能的话,我真的很喜欢所有相关的细节,而不是简化。
您的实现使得将左值作为右值转发是不可能的。对于左值 A,T 推导出为 A&,因此 A& 是您的返回类型(左值)。
有关适用于的用例列表,请参阅N2951forward
。
在完美的转发用例中需要将左值作为右值转发:
template <class T>
void bar(T&& t);
template <class T>
void foo(T&& t)
{
bar(std::forward<T>(t));
}
内部foo
t
总是一个左值。考虑案例foo(A())
。 T
推导出为A
,并且您希望t
作为右值转发A
,即使 t
是左值。
forward<A>(t);
将左值转换t
为A&&
(右值)。