在完美转发中, std::forward
用于将命名的右值引用 t1
和 t2
转换为未命名的右值引用。这样做的目的是什么?如果我们将 t1
& t2
作为左值,这将如何影响被调用的函数 inner
?
template <typename T1, typename T2>
void outer(T1&& t1, T2&& t2)
{
inner(std::forward<T1>(t1), std::forward<T2>(t2));
}
原文由 Steveng 发布,翻译遵循 CC BY-SA 4.0 许可协议
从另一个角度来看,在通用引用赋值中处理 右值 时,可能需要保持变量的类型不变。例如
使用
std::forward
,我们确保z
与x
具有完全相同的类型。此外,
std::forward
不影响左值引用:仍然
z
x
相同的类型。So, back to your case, if the inner function has two overloads for
int&
andint&&
, you want to pass variables likez
assignment noty
一。示例中的类型可以通过以下方式评估: