【C++】C++11可变参数模板
温馨提示:这篇文章已超过397天没有更新,请注意相关的内容是否还可用!
👀樊梓慕:个人主页
🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》《算法》
🌝每一个不曾起舞的日子,都是对生命的辜负
目录
前言
可变参数模板的定义方式
可变参数模板的使用
编译时递归展开参数包
可变参数模板的应用:emplace系列函数
对比emplace_back与push_back
emplace系列真正的优势在于浅拷贝的类
总结
List类增添模拟实现emplace系列函数
构造
emplace_back()
emplace()
前言
其实我们之前经常使用可变参数模板,C语言的printf函数大家一定非常熟悉,其实这就是一种可变参数模板:
那么在C++11引入可变参数模板的设计可以带来什么变化呢?让我们一起来学习下吧!
欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。
=========================================================================
GITEE相关代码:🌟樊飞 (fanfei_c) - Gitee.com🌟
=========================================================================
可变参数模板的定义方式
template
返回类型 函数名(Args... args)
{
//函数体
}
例如:
// Args是一个模板参数包,args是一个函数形参参数包
// 声明一个参数包Args...args,这个参数包中可以包含0到任意个模板参数。
template
void ShowList(Args... args)
{}
- 模板参数Args前面有『 省略号』,代表它是一个可变模板参数,我们把带省略号的参数称为参数包,参数包里面可以包含0到任意个模板参数,而args则是一个函数形参参数包。
- 模板参数包Args和函数形参参数包args的名字可以任意指定,并不是说必须叫做Args和args,判断是否为参数包的主要关键在『 省略号』。
可变参数模板的使用
此时我们可以传入任意多个参数了,并且这些参数可以是不同类型的:
int main() { ShowList(); ShowList(1); ShowList(1, 'A'); ShowList(1, 'A', string("hello")); return 0; }我们可以在函数模板中通过sizeof计算参数包中参数的个数:
template void ShowList(Args... args) { cout
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!


