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

C++新特性-列表初始化

列表初始化

介绍

C++11标准引入,扩大了用大括号括起的列表{元素1,元素2,...}的使用范围,使其可用于所有的内置类型和用户自定义的类型。

  • 可通过列表初始化对vector、list等容器进行初始化,而不再需要手动循环进行赋值,如:
intmain(){intx[]={1,2,3,4,5};intx1[]{1,2,3,4,5};std::vector<int>x2{1,2,3,4,5};std::vector<int>x3={1,2,3,4,5};std::list<int>x4{1,2,3,4,5};std::list<int>x5={1,2,3,4,5};std::set<int>x6{1,2,3,4,5};std::set<int>x7={1,2,3,4,5};std::map<std::string,int>x8{{"bear",4},{"cassowary",2},{"tiger",7}};std::map<std::string,int>x9={("bear",4},{"cassowary",2},{"tiger",7}}};}
  • 使用{}替代原本的()进行初始化,可避免歧义。

A a();是声明一个a函数,还是定义一个类型A的a对象,容易产生歧义,则可以统一使用A a{};进行初始化。

structC{C(std::string s,inta){};};voidfoo(C c){}intmain(){C c1{"dada",0090};C*c2=newC{"qqq",1919};foo({"diill",8899});// 可使用{}直接进行传参}

std::initializer_list

std::initializer_list本质上就是一个支持beginend、以及size成员函数的类模板,类中大致使用数组对元素进行组织。该类的beginend并非返回一个封装的iterator,而是一个常量对象指针const T*

容器之所以能支持列表初始化,其需要有以std::initializer_list为参数的构造函数。编译器将{}中包含的元素封装为std::initializer_list,再调用容器中支持该类型的构造函数来构造容器。如:

structC{C(std::initializer_list<std::string>a){for(autoit=a.begin();it!=a.end();it++){std::cout<<*it<<" ";}std::cout<<std::endl;}};

使用注意

当大括号括起的列表{元素1,元素2,...}支持符合类中多个构造函数,优先调用以std::initializer_list为参数的构造函数。

structC{C(std::initializer_list<std::string>a){std::cout<<"use initializer_list"<<std::endl;}C(std::string a,std::string b){std::cout<<"use strng,string"<<std::endl;}};intmain(){C{"11","dd"};//输出 use initializer_listreturn0;}

指定初始化

C++20标准中引入了指定初始化的特性。该特性允许指定初始化数据成员的名称,从而使代码意图更加明确。如:

structPoint{inta;intb;}Point p{.a=1;}// b=0

http://www.jsqmd.com/news/462611/

相关文章:

  • 打开网站显示403 Forbidden(禁止访问)错误怎么办|已解决
  • HIC数据预处理实战:Hicup、ALLHiC和juicer三大工具保姆级教程(含避坑指南)
  • 智能家居玩家必备:用HACS解锁HomeAssistant隐藏玩法(支持HomeKit/米家双平台)
  • 兰州装修公司怎么选?这份“口碑爆棚”的装修公司名单请查收 - 装修热点在线
  • 立创EDA专业版实战:标准RGB接口40pin转50pin转接板设计与验证
  • 2026 年 AI 大模型资讯深度研究报告 / 2026 年 3 月 11 日
  • 2026年分期乐京东e卡回收行情:最新折扣与操作步骤详解 - 京回收小程序
  • STM32F4X GPIO实战:从点灯到按键消抖的完整开发指南
  • Android Media3 ExoPlayer 缓存功能实现与优化指南
  • DeepSeek-OCR-2保姆级教程:深求·墨鉴GPU监控脚本+显存泄漏排查+日志分析
  • AI营销时代下优质的 GEO服务商推荐,品牌显性化的必备指南 - 品牌策略主理人
  • Python实战:3步搞定MNIST数据集转PNG图片(附完整代码)
  • Winform实战指南:如何高效集成自定义控件库(dll)
  • 2026国内最新青少年祛痘品牌top5推荐! - 十大品牌榜
  • 华为设备VLAN通信故障排查:TPID配置关键点解析
  • 龙迅LT9611EX芯片深度解析:双端口MIPI转HDMI1.4转换器的设计与应用
  • 博通PEX89000 PCIe 5.0交换芯片:如何为AI集群构建高效GPU互联架构
  • FFmpeg实战:drawtext滤镜进阶应用与中文水印疑难解析
  • 2026年AI写作软件底层逻辑横评:长篇网文如何破局“上下文遗忘”与“AI消痕”?
  • PCB六层板排行2026 猎板领跑高可靠5G时代
  • PostgreSQL 主键优化:从自增ID到雪花算法的实战迁移
  • 解决supervisorctl连接拒绝:从版本冲突到源码安装的完整指南
  • 八层板打样评测,哪家高速信号做得稳?
  • DAMO-YOLO模型部署到移动端:Android集成实战指南
  • 告别磁盘告急!Apache DolphinScheduler 日志滚动与自动清理实战指南
  • STM32F407 ADC实战进阶:从规则通道到注入通道的编程指南与源码解析
  • Oracle19c从零到精通:安装与基础配置全攻略(附常见问题解决)
  • QtScrcpy:跨设备协同与无感化控制的技术革命
  • Anomalib实战指南:Engine参数详解与优化策略
  • Python Tkinter Treeview表格美化实战:如何自定义边框样式让数据更清晰?