当前位置: 首页 > news >正文

C++11(可变参数模板,emplace系列接口)

文章目录

  • 可变参数模板
    • 参数包展开
    • emplace接口

可变参数模板

c++11支持可变参数模板,可以自定义模板参数的数量,可变数目的参数被称为参数包
参数包分为模板参数包和函数参数包
一个包可以包含0或多个参数,可以通过sizeof…(args)来获取参数个数,0个也是合法的,不报错

//class...Args表示模板参数包,接收任意数量任意种类的参数类型,比如int,string等//int ...Nums表示非类型模板参数包,接收常量,比如一堆整数template<class...Args,int...Nums>voidfunc(Args...args)//Args...表示函数参数包,用于存放所有收到的实参,比如1,"张三"等{cout<<sizeof...(args)<<endl;}template<class...Args>voidfunc1(Args&&...args){}//万能引用版本,配合forward()实现完美转发intmain(){func(1);//1个参数func(1,2,3,"abaaba")//多个不同类型参数

参数包展开

通过一个函数来递归展开参数包,还需要定义一个递归终止函数

voidshow_args(){//递归出口}template<classT,class...Args>voidshow_args(T val,Args...args){cout<<val<<" ";//会自动将参数包里的第一个参数传给val,并对val进行操作show_args(args...);//剩余参数打包为新的参数包继续递归拆解,最后剩0个元素时会调用无函数的重载}//拆包过程会在编译时确定递归几次show(1,2,3,"abc",3.14);

emplace接口

C++11之后STL容器都新增了emplace系列接口,均为模板可变参数
功能上兼容push系列和insert系列,还支持直接输入构造被容纳类型的参数,在容器空间中直接构造对象
emplace总体而言是更高效的,推荐可以代替insert和push系列

vector<string>v;v.push_back("hello");//push:先造临时string,再移动/拷贝进容器v.emplace_back("hello");//emplace:传构造参数,在尾部直接构造,无临时对象v.insert(v.end(),string("hello"));//insert:插入完整对象v.emplace(v.end(),"hello");//emplace:传构造参数,在迭代器处就地构造v.emplace_back({"hello"})//会先使用花括号初始化构造string,再将string插入v,效率并没有提升
http://www.jsqmd.com/news/816959/

相关文章:

  • 3分钟掌握React Markdown渲染:告别XSS风险,打造安全高效的文档系统
  • 终极指南:新一代Krkrz引擎XP3资源解包工具 - KrkrzExtract完全解析
  • 小龙虾 OpenClaw Windows 11 安装|2026 一键部署|零代码小白教程
  • 以凰为魂,以标为尺:《凰标》丈量华夏文艺万丈高度@凤凰标志
  • 【Hermes:进阶调优与性能优化】42、Hermes Agent 终端后端深度对比:local/docker/ssh/daytona/modal/singularity,一篇帮你选对沙箱
  • HIV protease substrate VIII;VSQNYPIV
  • AVP算法开发者的PanoSim 5.0实战:如何用Python/C API为自主泊车系统注入“灵魂”?
  • OpenClaw AI助手安全架构:基于信任分层的权限控制与防御实践
  • Linux系统入门:从发行版选择到核心命令与自动化实战
  • 环境配置与基础教程:源码级剖析:使用 torchinfo 与 fvcore 精准打印 YOLO 模型结构、参数与 FLOPs
  • 进程线程协程?一文解决!
  • 你的数字相册管家:用AntiDupl智能清理重复与缺陷图片
  • TVA 与传统工业视觉:技术内核与应用分野(17)
  • AI辅助开发在扫地机机器人技术中的应用
  • 第75篇:Vibe Coding时代:LangGraph 自动选择回归测试实战,解决每次全量测试太慢、局部测试又漏的问题
  • (B站TinyML 教程学习笔记)C15 - 在 Edge Impulse 中训练模型+C16 - 如何评估模型性能+C17 - 欠拟合与过拟合+C18 - 如何使用模型进行推理
  • 如何高效配置OpenDroneMap:5个实战技巧深度解析无人机数据处理方案
  • 三分钟解锁全平台QQ聊天记录:你的数据,你做主!
  • 从开发者视角看taotokenapi调用的整体响应速度与成功率
  • 3个实用技巧让magnetW磁力搜索工具发挥最大价值
  • 前端Web开发(2)
  • 2026年外墙仿石漆服务商哪家好?主流品牌选型参考与行业实力分析 - 产业观察网
  • Postman便携版:无需安装的Windows API测试工具终极指南
  • Topit:3分钟掌握macOS窗口置顶,工作效率提升200%的终极指南
  • ClawShelf开源媒体库:开发者如何用元数据与标签管理数字资产
  • PRD写得再厚,客户为何不买账?给需求绑上业务的救命绳
  • 2026年成都3-6岁少儿英语启蒙机构对比评测:专业性与教学理念深度对比 - 品牌种草官
  • Python自动化管理Synology NAS:Synology API v0.8全面解析
  • Python Redis客户端实战:redis-py深度解析
  • B站直播推流码终极指南:如何轻松绕过官方限制使用OBS直播