类型推导:类型推导规则
问题1:我们为什么要掌握类型推导规则?
答:只有当我们熟悉类型推导的规则,才能让我们的代码更加的灵活,通用性好。
类型推导的作用:代码更加的灵活,通用性好
类型推导的适用场景:
函数模板、类模板(万能引用)
auto
decltype
decltype(auto)
函数模板的类型推导规则:
知识点1:万能引用(未定义引用)(只限定函数模板,在其他场合下均是右值引用)
作用:代码通用性增加(因为万能引用可以接受任何类型)
template<typename T> //只限定在模板里面
void func(T &¶m) // T && 实际上就一个万能引用(未定义引用)
{
cout << "&&" << " " << param << endl;
}
int main()
{
int num = 5;
int &lr_num = num;
int &&rr_num = std::move(num);
func(num); //传入一个变量
func(5); //传入一个常量
func(lr_num); //传入一个左值引用
func(rr_num); //传入一个右值引用
return 0;
//全部调用func(T && param)
}
万能引用:既可以接受左值传递,也可以接受右值
且 T后面必须紧跟&&
template<typename T>
void func1(std::vector<T> &&v1) {} //不是万能引用 尖括号阻隔了T与&&
const关键字会消除万能引用
template<typename T>
void func(const T &¶m) {} //不是万能引用
知识点2: