考虑下面的代码。那里发生了什么事?
#include <iostream>
#include <stdio.h>
using namespace std;
template<class T>
void test(T &t) // but why int&& is valid here,when instantiated with test<int&>??
{
puts("T&");
}
int tref(int&& param) //compile error
{
puts("tref&");
}
int main()
{
int i;
test<int&>(i);
}
我不确定我是否理解,如果你在第一个中指的是int&&
,因为T
是int&
,那么你错了。当T
是int&
时,签名中的T&
仍然是int&
。此外,int&&
与用额外的&
组成int&
无关。&&
具有特定的含义:右值引用。
§8.3.2[dcl.ref]/5
不应有对引用的引用,不应有引用数组,也不应有指向引用的指针。[…]
§8.3.2[dcl.ref]/6
如果typedef(7.1.3)、类型模板参数(14.3.1)或decltype说明符(7.1.6.2