0

我正在阅读有关“完美转发”的信息。为什么这只适用于模板:

// 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 是什么意思

4

1 回答 1

0

请阅读本文以了解其std::forward工作原理。

关于您关于“为什么这只适用于模板”的问题。我的理解是std::forward适用于模板和非模板功能。但是std::forward在非模板函数中没有必要使用。例如

void f(X&& x)
{
    g(std::move(x));
}

在上面的代码中,我们确定x是右值引用。所以我们std::move(x)用来“中继”对 function 的右值引用g(X&& x)。当然,你也可以g(std::forward(x))这样做,但我认为它不可能比std::move.

于 2012-08-22T02:38:41.060 回答