C++11 std::forward的结构

C++11 std::forward的结构,c++11,rvalue-reference,C++11,Rvalue Reference,可能重复: 我真的很好奇,std::forward为什么需要一个显式的模板参数?难道这不简单吗 template<typename T> T forward(T&& ref) { return ref; } 模板T转发(T&&ref){ 返回ref; } 如果可能的话,我想要所有相关的细节,而不是简化。您的实现使得无法将左值作为右值转发。对于左值A,T推断为A&,因此A&是您的返回类型(左值) 有关适用于的用例列表,请参见 在完美的转发用例中,需要将左值

可能重复:

我真的很好奇,
std::forward
为什么需要一个显式的模板参数?难道这不简单吗

template<typename T> T forward(T&& ref) {
    return ref;
}
模板T转发(T&&ref){
返回ref;
}

如果可能的话,我想要所有相关的细节,而不是简化。

您的实现使得无法将左值作为右值转发。对于左值A,T推断为A&,因此A&是您的返回类型(左值)

有关适用于的用例列表,请参见

在完美的转发用例中,需要将左值转发为右值:

template <class T>
void bar(T&& t);

template <class T>
void foo(T&& t)
{
    bar(std::forward<T>(t));
}

将左值
t
转换为
A&&
(右值)。

您知道,我意识到我的问题的结构有问题,但答案实际上没有回答问题,这就是为什么需要显式类型参数的原因。我已经了解了现有的实现,但不是为什么需要这样做,或者更确切地说,我了解了为什么两个参数版本存在,但为什么一个参数没有重载。这是一个重复,我终于找到了另一个问题(你回答了),我投票决定结束
forward<A>(t);