int&& 在模板实例化中有效吗?



考虑下面的代码。那里发生了什么事?

#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&&,因为Tint&,那么你错了。当Tint&时,签名中的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

相关内容

最新更新