C++11 列表初始化initializer_list

news2024/12/24 3:15:12

引子

C++11,是继C++98后的一次有力更新,引进了很多好用的语法,STL也添加了几个新容器,也解决了很多的问题。本篇博客就学习一下C++11列表初始化的新语法和 initializer_list

在这里插入图片描述

文章目录

  • 引子
  • 一. 列表初始化
  • 二. initializer_list
  • 结束语

一. 列表初始化

在C++类和对象中,类的构造函数有初始化列表,而我们今天要学习的是列表初始化,二者名字相近,但是是两个不一样的语法。

我们需要一个Date类介绍相关语法

class Date
{
public:
	//有参构造
	Date(int year, int month, int day)
		:_year(year)
		,_month(month)
		,_day(day)
	{}

	//打印
	void Print()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};

在以往,我们给一个变量赋值,或者给一个自定义类型初始化,我们是这么做的

在这里插入图片描述

而C++11,提供了列表初始化,即使用 { } 初始化数据,如下:

在这里插入图片描述
但是底层并没有那么神奇。我们知道为了适应面向对象,其实C++的基本数据类型,比如int,double,其实都有构造函数,也有匿名对象。而列表初始化其实就是调用该类型的构造函数而已。

我们在日期类的构造函数加上一句打印的代码

//有参构造
	Date(int year, int month, int day)
		:_year(year)
		,_month(month)
		,_day(day)
	{
		cout << "Date类的构造函数" << endl;
	}

再执行程序,运行结果如下:

在这里插入图片描述


而STL中的容器也同样支持使用 { } 初始化

在这里插入图片描述
这是如何实现的呢?
其实是通过C++11新加入的 initializer_list 实现的


二. initializer_list

initializer_list是C++11提供的一种新类型
在这里插入图片描述
在这里插入图片描述

C++11会将 { } 括起来的内容识别为常量数组,然后构造成 initializer_list
在这里插入图片描述

在这里插入图片描述
三者其实是等价的。
同时因为是常量数组,所以内容不允许修改
在这里插入图片描述

但是vector等容器是如何支持构造的呢?
其实是都增加了一个支持 initializer_list 的构造函数
在这里插入图片描述

map支持如下构造

map<string, string>dict = { {"sort","排序"},{"string","字符串"},{"delete","删除"} };

结束语

本篇内容到此就结束了,感谢你的阅读!

如果有补充或者纠正的地方,欢迎评论区补充,纠错。如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/560281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口测试的流程?怎么设计接口测试用例?两张图给你讲的明明白白

目录 一、简介 二、接口测试的流程 三、为什么要写用例 四、接口用例设计 一、简介 在开始接口测试之前&#xff0c;我们想一下&#xff0c;接口测试的流程是什么&#xff1f;说到这里&#xff0c;有些人就会产生好奇和疑问&#xff0c;心里mmp&#xff1a;接口测试要什么流…

详细的谈谈,软件测试定义、目的及原则。

1.软件测试定义 软件测试就是在产品上线前&#xff0c;对软件需求、设计方案和编码实现的核查。软件测试的定义 软件测试是为了发现错误而执行程序的过程使用人工或自动方式来运行并测试某个系统&#xff0c;以此来检验系统是否满足规定的需求并确定预期结果与实际结果的差异 …

WEB安全:深入反射式dll注入技术

一、前言 dll注入技术是让某个进程主动加载指定的dll的技术。恶意软件为了提高隐蔽性&#xff0c;通常会使用dll注入技术将自身的恶意代码以dll的形式注入高可信进程。 常规的dll注入技术使用LoadLibraryA()函数来使被注入进程加载指定的dll。常规dll注入的方式一个致命的缺陷…

你不会还不知道如何用Python写一个切水果的小游戏吧

目录 引言 一、需要导入的包 二、窗口界面设置 三、随机生成水果位置 四、绘制字体 五、玩家生命的提示 六、游戏开始与结束的画面 七、游戏主循环 引言 水果忍者的玩法很简单&#xff0c;尽可能的切开抛出的水果就行。 今天小五就用python简单的模拟一下…

linux centos 安装zookeeper服务

一、进入官网&#xff1a;Apache ZooKeeper 二、下载安装包 可以使用wget 下载&#xff0c;我这里服务器的原因就不使用了&#xff0c;直接在网页使用http下载&#xff0c;然后通过xftp上传到服务器 下载完成后通过xftp上传到linux服务器 三、解压 tar -zxvf apache-zookeepe…

520中国劲酒携手撒贝宁直播探厂,共同见证健康跑活动启幕

5月20日是“网络情人节”,每年一度的 520,所有人都沉在真爱告白的浓情氛围当中,对于全中国的劲酒爱好者来说,520 却有着不一样的意义,每年 520 劲粉节,中国劲酒以爱之名,号召和鼓励劲粉们培养持之以恒的健康生活方式。      520 当日,总台央视主持人撒贝宁来到了湖北大冶市…

新手要学网络安全应该从哪学起?

写在开篇 本人10 年工作经验&#xff0c; 擅长 Web 安全攻防、渗透领域&#xff0c; 在金融领域的安全有丰富的实战经验。从事在线教育 3 年多培养学员过万&#xff0c;讲解清晰透彻&#xff0c;课程干货内容多&#xff0c;辅导学员耐心细致 我为啥说自学黑客&网络安全&a…

SSM框架学习之Mybatis

SSM Spring SpringMVC Mybatis&#xff0c;这是一种常用的Java Web开发框架组合。Spring是一个轻量级的IoC和AOP容器框架&#xff0c;SpringMVC是基于Spring的MVC框架&#xff0c;Mybatis是一种ORM(Object Relational Mapping)框架&#xff0c;用于在Java应用中管理数据库。…

libvirt job机制浅析

libvirt 中&#xff0c;job 机制用于处理和跟踪针对虚拟机域&#xff08;domain&#xff09;的长时间操作&#xff0c;如迁移、快照、保存&#xff0c;热插拔等。job 机制的主要目的是确保在同一时间只有一个长时间操作可以执行&#xff0c;从而避免竞争条件和不一致性问题。 …

C嘎嘎~~[类和对象 精华篇]

类和对象 精华篇 static成员引入特点问题收尾 友元友元函数友元类 内部类理解 类和对象 static成员 引入 &#x1f5e8;️[题目] 实现一个类&#xff0c;计算程序中创建出了多少个类对象 先分析一下题目: 程序运行中, 有对象的创建, 也有对象的销毁 ⇒ 对应下来就是 构造,拷…

linux服务器断电重启后,发现时间误差八小时

文章目录 问题现象排查与解决时间同步与设置服务器时钟介绍 问题现象 客户的服务器已部署好平台&#xff0c;放入了机房&#xff0c;运行正常。服务器系统时间设置东八区&#xff08;CST&#xff09;&#xff0c;时间日期也已修改正确客户是我省的某小县城&#xff0c;某台晚上…

28 KVM管理系统资源-绑定QEMU进程至物理CPU

文章目录 28 KVM管理系统资源-绑定QEMU进程至物理CPU28.1 概述28.2 操作步骤 28 KVM管理系统资源-绑定QEMU进程至物理CPU 28.1 概述 QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内&#xff0c;从而保证了运行不同业务的虚拟机不会干扰到邻位虚拟机。例如在一个…

ArcMap:第一届全国大学生GIS技能大赛(滁州学院)详解-下午题

目录 01 题目 02 数据 2.1 主要沟谷文件 2.2 DEM数字高程文件 2.3 气象站点数据 2.4 系统设计相关的DLL等文件 03 思路 3.1 作物生长条件的思路 3.1.1 对于条件1 3.1.2 对于条件2 3.1.3 对于条件3 3.1.4 对于条件4 3.2 水系的提取 3.3 种植面积的计算 04 实操 …

linux下cpu占用率100%怎么解决?

在实际的生产环境中&#xff0c;常常会遇到服务器CPU爆满的问题&#xff0c;这时候&#xff0c;正确的排查方法&#xff0c;有助于快速的定位问题。 1、找到最耗CPU的进程 使用top命令查看系统总体的CPU和内存使用情况&#xff0c;以及各个进程的资源使用情况。 2、找到最耗…

迈向5.5G丨美格智能持续创新,为智能世界创造新价值

5月11日&#xff0c;2023 “高通&美格智能物联网技术开放日”深圳站活动举行&#xff0c;美格智能高级产品总监在活动中发表题为《迈向5.5G&#xff0c;智联新未来》的主题演讲&#xff0c;分享了美格智能在5G技术演进中的创新实践。 ▲美格智能高级产品总监 刘伟鹏 ▌技术…

【基础折线图】学习使用flask、echarts搭建数据可视化图表网页

文章目录 前言Apache EchartsNPM 安装 ECharts在线定制 ECharts使用 Echarts Flaskpip安装flask 学习案例案例目录html代码flask代码 源码地址 前言 本文中的所有代码&#xff0c;全部都有详细注释&#xff0c;有需要的同学可以在文末领取&#xff01; 数据可视化是数据分析必…

19-01 技术选型的道与术

系列目录导航&#x1f449; 什么是技术选型&#xff0c;技术选型的重要性 根据实际业务管理的需要&#xff0c;对硬件、软件以及所要用到的技术进行规格的选择狭义上的技术选型&#xff1a;团队决定选用哪种技术去解决问题&#xff0c;比如选用某个技术语言、某个技术框架去开…

Android12之模板类单例模式实现原理(一百五十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

openGauss 年度大型开发者会议来袭,快来看看都有哪些SIG组参加!

openGauss Developer Day 2023 将于5月26日在北京举办。作为大会的重要环节&#xff0c; SIG组版本规划工作会议 将汇聚社区各个SIG 组的用户与开发者&#xff0c;与大家见面&#xff0c;共同讨论开源数据库的技术发展与创新。属于开发者的狂欢日&#xff0c;期待大家的到…

CMAKE命令详解

目录 CMake 语法 案例&#xff1a; 面试中给可能会问的问题和回答&#xff1a; 总结&#xff1a; CMake 是一个用于构建和管理跨平台软件项目的开源工具。它使用名为 CMakeLists.txt 的文本文件来描述项目的构建过程。 CMake 语法 当使用 CMake 构建项目时&#xff0c;可以…