C++ 为什么在这种情况下模板参数是引用?

C++ 为什么在这种情况下模板参数是引用?,c++,templates,template-specialization,forwarding-reference,C++,Templates,Template Specialization,Forwarding Reference,在玩std::forward时被一种奇怪的行为刺伤。下面是一个小例子: #包括 #包括 模板 无效函数(A&&) { 标准::cout 这就是工作原理;当传递左值时,模板参数A将被推断为左值引用。在这种情况下,它是int*&,即指向指针的左值引用。(引用折叠后,函数参数的类型也将是int*&) 当传递右值时,A将被推断为非引用类型。例如,如果传递类型为int*的右值,A将被推断为int*(那么函数参数的类型将是int*&)这是一段我甚至都不知道的语法。使用像template func(a&&a1

在玩std::forward时被一种奇怪的行为刺伤。下面是一个小例子:

#包括
#包括
模板
无效函数(A&&)
{
标准::cout
这就是工作原理;当传递左值时,模板参数
A
将被推断为左值引用。在这种情况下,它是
int*&
,即指向指针的左值引用。(引用折叠后,函数参数的类型也将是
int*&


当传递右值时,
A
将被推断为非引用类型。例如,如果传递类型为
int*
的右值,
A
将被推断为
int*
(那么函数参数的类型将是
int*&

这是一段我甚至都不知道的语法。使用像
template func(a&&a1,a&a2,a a3);
这样的函数,它会变得更加清晰,这似乎是你永远无法调用的