《C++ Primer》读书笔记第十六章-2-模板实参推断、可变参数模板

笔记会持续更新,有错误的地方欢迎指正,谢谢!

模板实参推断

本章内容不重要,了解即可~

类型转换与模板类型参数

类型参数转换:通常不转换而是生成一个新的模板实例;有限可用的转换规则包括const转换和数组或函数指针转换;非模板类型参数正常转换。

函数模板显示实参

显式模板实参:在函数之后,实参列表前用尖括号提供显式实参;只有尾部的显式模板实参,并且可从函数参数推断出来的时候,才可忽略;显式指定的实参可正常类型转换。

尾置返回类型与类型转换

尾置返回类型:需要根据传入的参数确定返回类型时,可通过decltype推断形参作为返回类型,使用尾置返回类型格式返回。
标准库类型转换模板:定义在头文件type_traits中,每个模板有一个公有成员type用于转换,不能转换时则返回模板参数类型本身;如remove_reference可将T&、T&&、T转换为T。

函数指针和实参推断

函数指针:用函数模板初始化函数指针时,根据指针的类型推断模板实参;可以使用显式模板实参消除二义性。

模板实参推断和引用

引用折叠:间接创建引用的引用,除右值引用的右值引用折叠为右值引用,其他3种引用的引用都折叠为左值引用。
右值引用形参:可传给它任意类型的实参,若传引用也不改变左/右值属性;通常用于模板转发实参或模板重载;使用右值引用的函数模板通常重载绑定非const右值引用或const左值引用。

转发

转发:函数参数指向模板类型参数的右值引用,可保持对应实参的const属性和左/右值属性;进一步为解决接受右值引用参数不被理解为左值的问题,使用utility头文件中定义的forward,返回显式实参的右值引用,可保持实参类型的所有细节。

重载与模板

没啥有意义的的

可变参数模板

可变参数模板:接受可变数目参数的模板函数或模板类;class…、typename…、type-name…指定参数包,之后跟零个或多个参数,用sizeof…(args)获取参数个数;如template <typename… Args> void foo(const Args& … args)中,Args是模板参数包,args是函数参数包。

可变参数函数模板:可变参数函数通常是递归的,非可变参数版本的声明必须在作用域内,否则无限递归。

包扩展:将一个包分解为多个元素,并对每个元素应用模式,通过在模式后添加省略号触发。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值