我正在读“完美转发”。 为什么这只适用于模板:
// example from justsoftwaresolutions
void g(X&& t); // 2
void g(X& t); // 1
template<typename T>
void f(T&& t)
{
g(std::forward<T>(t));
}
int main()
{
X x;
f(x); // 1
f(X()); // 2
}
从f(x)和f(X())的模板生成什么函数?
std:forward是什么
答案 0 :(得分:0)
请阅读this以了解std::forward
的工作原理。
关于“为什么这只适用于模板”的问题。我的理解是std::forward
适用于模板和非模板函数。但是没有必要在非模板函数中使用std::forward
。例如
void f(X&& x)
{
g(std::move(x));
}
在上面的代码中,我们确定 x
是左值参考。所以我们使用std::move(x)
来“转发”对函数g(X&& x)
的右值引用。当然,您也可以使用g(std::forward(x))
来执行此操作,但我认为它不可能比std::move
更好。