能按照参数原来的类型转发到另一个函数,这种转发被称为完美转发。完美转发,是指在函数模板中,完全依照模板的参数的类型(即保持参数的左值、右值特征),将参数传递给函数模板中调用的另外一个函数。C++11中提供了一个函数std::forward,它是为转发而生的,不管参数是T&&这种未定的引用还是明确的左值引用或者右值引用,它会按照参数本来的类型转发。
template<typename T>
void printT(T& t)
{
cout <<"lvaue"<< endl ;
}
template<typename T>
void printT(T&& t)
{
cout<<"rvalue"<< endl;
}
template<typename T>
void testForward(T&& v)
{
printT(v);
printT(std::forward<T>(v));
printT(std::move(v));
}
test ()
{
testForward(1); // lvalue rvalue rvalue 需要理解参数是否是右值还是左值
int x = l;
testForward(x); //lvalue lvalue rvalue
testForward(std::forward<int>(x)); // lvalue rvalue rvalue
}
//testForward(x); 未定的引用类型T&& v被一个左值初始化后变成一个左值引用。在调用printT(std::forward<T>(v));时会被转发到printT(T& t);