引言-------之前我一直有个错误的概念,举个例子
type(int)&& 一直以为是万能引用 实际上是错误的,该类型为右值引用
const type(int) & 这个才是万能引用(左值,左值引用,常左值,常左值引用,右值,右值引用,常右值引用)
但是:
template<class T>
void func(T&& a){}
在这里,T&&称为不确定类型,即可以接受所有类型
思考:为什么右值引用在传递的过程中会退化为左值?
#include<iostream> using namespace std; void fun(int& a) { cout << "fun &" << endl; } void fun(int&& a) { cout << "fun &&" << endl; } void print(int&& a) { fun(a);//在这里传参的时候,右值 20 已经具名化,即退化为左值 } int main() { print(20); return 0; }
类型转换
#include<iostream>
using namespace std;
template<class T>
class my_remove_reference//去掉引用属性
{
public:
using type = T;
my_remove_reference() { cout << "my_remove_reference T" << endl; }
};
template<class T>
class my_remove_