【C++】C++11可变参数模板

2024-04-10 1129阅读

温馨提示:这篇文章已超过397天没有更新,请注意相关的内容是否还可用!

【C++】C++11可变参数模板

👀樊梓慕:个人主页

 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》《算法》

🌝每一个不曾起舞的日子,都是对生命的辜负


目录

前言

可变参数模板的定义方式

可变参数模板的使用 

编译时递归展开参数包

可变参数模板的应用:emplace系列函数

对比emplace_back与push_back

emplace系列真正的优势在于浅拷贝的类

总结

List类增添模拟实现emplace系列函数

构造

emplace_back()

emplace()


前言

其实我们之前经常使用可变参数模板,C语言的printf函数大家一定非常熟悉,其实这就是一种可变参数模板:

【C++】C++11可变参数模板

那么在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 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]