恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

[C++11] { }列表初始化

  • 首页
  • 资讯中心
  • /
  • [C++11] { }列表初始化

相关资讯

拓扑排序与动态规划:解决DAG路径计数问题的核心思路与实践 2026/8/29 12:09:31
可配置数据转换器Plural系列如何颠覆传统ADC/DAC定价与库存模式 2026/8/29 12:09:31
Caddy mTLS 实战:条件化双向认证与客户端证书校验 2026/8/29 12:09:31

最新资讯

先睹为快!VCL界面DevExpress VCL 8月即将推出一系列新功能
Claude Code接入DeepSeek:终端AI编程Agent的模型替换实战
Web开发者福音!创建第一个Vite支持的Web应用(1/2)
高效添加缝合模块的三步法:定位、设计、验证
基于TensorFlow与CNN的猫狗识别实战:从环境搭建到模型部署
Linux(CentOS)系统安装mysql8流程

今日推荐

云计算SPI三类服务模式是逐层抽象的关系:IaaS提供最底层的硬件资源,PaaS在IaaS基础上封装了开发运行环境,SaaS则进一步封装为可直接使用的软件
最新稳定版(Python 3.14):这是目前官方推荐的最新稳定版本。作为最后一个采用传统“3.x”命名的版本
etc目录下的profile.d文件目录设置环境变量和全局脚本shell

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

[C++11] { }列表初始化

发布时间:2026/8/29 12:09:31
[C++11] { }列表初始化 ​嘿各位技术潮人好久不见甚是想念。生活就像一场奇妙冒险而编程就是那把超酷的万能钥匙。此刻阳光洒在键盘上灵感在指尖跳跃让我们抛开一切束缚给平淡日子加点料注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗Let’s go我的博客yuanManGan我的专栏C入门小馆 C言雅韵集 数据结构漫游记 闲言碎语小记坊 进阶数据结构 走进Linux的世界 题山采玉 领略算法真谛C 111.C11的发展历史C11是C发行的第二个主要版本并且对比C98,有了重要的更新C03之后过了整整八年才C11才真正问世。从此C版本每隔3年推出一次版本。2. 列表初始化2.1 C98传统的{}在c98中{}主要用于初始化数组和简单的结构体。structPoint{int_x;int_y;};intmain(){// 数组初始化inta1[]{1,2,3,4,5};inta2[5]{0};// 结构体初始化Point p{1,2};return0;}基本类型不能用{}初始化需要使用赋值或者构造函数。intx19;// 赋值初始化classDate{public:Date(intyear1,intmonth1,intday1):_year(year),_month(month),_day(day){}private:int_year;int_month;int_day;};intmain(){Dated(2025,1,1);// 使用构造函数初始化return0;}2.2 C11中的{}c11引入了列表初始化使得几乎所有类型的对象都可以使用{}初始化{}初始化也叫列表初始化。内置类型支持自定义类型也支持自定义类型的列表初始化等于先创建临时对象然后进行拷贝构造编译器优化为直接构造。{}初始化中可以省略。#includeiostream#includevectorusingnamespacestd;structPoint{int_x;int_y;};classDate{public:Date(intyear1,intmonth1,intday1):_year(year),_month(month),_day(day){coutDate(int year, int month, int day)endl;}Date(constDated):_year(d._year),_month(d._month),_day(d._day){coutDate(const Date d)endl;}private:int_year;int_month;int_day;};intmain(){//C11支持的//1.内置类型inta{5};//2.自定义类型Date d1{2025,9,3};//这里的本质是先创造临时对象然后d1拷贝构造构造临时对象//但编译器进行优化后就直接会用(2025, 9, 3)进行构造constDated2{2025,9,3};//这里d2引用的是{2025, 9, 3}创建的临时对象// 需要注意的是C98⽀持单参数时类型转换也可以不⽤{}Date d3{2025};Date d42025;// 可以省略掉Point p1{1,2};intx2{2};Date d6{2024,7,25};constDated7{2024,7,25};//只有{}初始化才能省略// Date d8 2025;vectorDatev;v.push_back(d1);v.push_back(Date(2025,1,1));// ⽐起有名对象和匿名对象传参这⾥{}更有性价⽐v.push_back({2025,1,1});return0;}2.3 C11中的std::initializer_list虽然上面的初始化已经很方便了但在容器初始化时如果我们用多个值进行初始化时就要写很多构造函数很麻烦。vectorintv1{1,2,3};vectorintv2{1,2,3,4,5};C11库中提出了⼀个std::initializer_list的类这个类底层是开一个数组将数据拷贝过来然后有两个指针分别指向开头和结尾。这是他的⽂档initializer_liststd::initializer_list⽀持迭代器遍历。容器⽀持⼀个std::initializer_list的构造函数也就⽀持任意多个值构成的 {x1,x2,x3…} 进⾏初始化。STL中的容器⽀持任意多个值构成的 {x1,x2,x3…} 进⾏初始化就是通过std::initializer_list的构造函数⽀持的。#includeiostream#includevector#includestring#includemapusingnamespacestd;intmain(){std::initializer_listintmylist;mylist{10,20,30};coutsizeof(mylist)endl;// 这⾥begin和end返回的值initializer_list对象中存的两个指针// 这两个指针的值跟i的地址跟接近说明数组存在栈上inti0;coutmylist.begin()endl;coutmylist.end()endl;coutiendl;// {}列表中可以有任意多个值//// 这两个写法语义上还是有差别的第⼀个v1是直接构造// 第⼆个v2是构造临时对象临时对象拷⻉v2优化为直接构造// v3: 引用绑定。{...}构造出一个临时vector纯右值v3直接绑定到该临时对象。vectorintv1({1,2,3,4,5});vectorintv2{1,2,3,4,5};constvectorintv3{1,2,3,4,5};// 这⾥是pair对象的{}初始化和map的initializer_list构造结合到⼀起⽤了mapstring,stringdict{{sort,排序},{string,字符串}};// initializer_list版本的赋值⽀持v1{10,20,30,40,50};return0;}

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号