C++中模板类型推断

本文详细介绍了C++中的类型推导规则,包括万能引用、函数模板推导、auto和decltype的使用,以及它们在不同场景下的作用和限制。通过对函数模板、auto、decltype的解析,阐述了如何增强代码的灵活性和通用性。
摘要由CSDN通过智能技术生成

类型推导:类型推导规则

问题1:我们为什么要掌握类型推导规则?

答:只有当我们熟悉类型推导的规则,才能让我们的代码更加的灵活,通用性好。

类型推导的作用:代码更加的灵活,通用性好

 

类型推导的适用场景:

函数模板、类模板(万能引用)

auto

decltype

decltype(auto)

 

函数模板的类型推导规则:

知识点1:万能引用(未定义引用)(只限定函数模板,在其他场合下均是右值引用)

作用:代码通用性增加(因为万能引用可以接受任何类型)

template<typename T>    //只限定在模板里面  
void func(T &&param)     //  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 &&param)  {}      //不是万能引用

 

知识点2:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值