[C++11]花括号{}、initializer_list、auto、decltype

news2024/12/23 8:14:31

文章目录

  • 1.花括号{ }的扩展
  • 2.initializer_list
  • 3.auto
  • 4.decltype
  • 5.容器的增加
    • 5.1array[useless]
    • 5.2forward_list[useless]
    • 5.3unordered_map/unordered_set
    • 5.4统一增加
  • 6.知乎文章

在这里插入图片描述

1.花括号{ }的扩展

int main()
{
	//C++98花括号{ }支持 1.数组 2.结构体
	struct Point
	{
		int _x;
		int _y;
	};
	int arr1[] = { 1, 2, 3, 4, 5 };
	int arr2[5] = { 0 };
	Point p = { 1, 2 }; 
	//C++11:1.内置类型 2.自定义类型
	struct Point2
	{
		int _x;
		int _y;
	};
	// = 号可以省略
	int x1 = { 1 };
	int x2{ 2 };

	int array1[]{ 1, 2, 3, 4, 5 };
	int array2[5]{ 0 };
	Point2 p2{ 1, 2 };
	//拓展
	int x(1); //int的构造函数
	
	//申请4个int 初始化成0
	int* pa = new int[4]{ 0 };


	//列表初始化方式调用构造函数初始化
	class Date
	{
	public:
		Date(int year, int month, int day)
			:_year(year)
			, _month(month)
			, _day(day)
		{
			cout << "Date(int year, int month, int day)" << endl;
		}
	private:
		int _year;
		int _month;
		int _day;
	};
	Date d1(2023, 10, 12); 
	Date d2{ 2023, 10,12 };
	Date d3 = { 2023, 10, 12 }; 
	return 0;
}

2.initializer_list

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//vector/list中的花括号{ }

//1.查看a,b的类型
auto a = { 10,20,30,40,50,60 };
auto b = { 10,20,30 };
cout << typeid(a).name() << endl;//class std::initializer_list<int>
cout << typeid(b).name() << endl;//class std::initializer_list<int>

//2.initializer_list的迭代器
initializer_list<int>::iterator it1 = a.begin();
initializer_list<int>::iterator it2 = b.begin();
cout << it1 << endl;
cout << it2 << endl;
// *it1 = 1;不可修改

//3.initializer_list的对象
initializer_list<int> c = { 10,20,30 };
initializer_list<int>::iterator it3 = c.begin();
cout << it3 << endl;

//vector/list中的{ }
//vector(
//      initializer_list<value_type> il,
//      const allocator_type& alloc = allocator_type()
//      );
vector<int> v1 = { 1,2,3,4,5 };
vector<int> v2 = { 10,20,30 };
vector<int> v3 = { 10,20,30,40,50,60 };
list<int> lt1 = { 1,2,3,4,5 };
list<int> lt2 = { 10,20,30 };

//vecotr中数据为自定义数据类型
Date D1(2023, 5, 20);
Date D2(2023, 5, 21);
vector<Date> vd1 = { d1, d2 }; 
vector<Date> vd2 = { Date(2023,5,20), Date(2023,5,21) }; //匿名对象
vector<Date> vd3 = { {2023,5,20}, {2023,5,20} };         //先调用Date构造函数

map<string, string> dict = { {"sort", "排序"},{"string", "字符串"},{"Date", "日期"} };
pair<string, string> pair1 = { "Date", "日期" };
pair<string, string> pair2{ "Date", "日期" }; 
return 0;
}

3.auto

C++98中auto是一个存储类型的说明符,表明变量是局部自动存储类型,但是局部域中定义局部的变量默认就是自动存储类型,所以auto就没什么价值了。
C++11中废弃auto原来的用法,将其用于实现自动类型推断

4.decltype

template<class T1, class T2>
void Func(T1 a, T2 b)
{
	decltype(a * b) x;
	cout << typeid(x).name() << endl;
}
int main()
{
//关键字decltype
//将变量的类型 声明为 表达式指定的类型
const int X = 1;
double y = 2.2;
cout << typeid(x * y).name() << endl;

decltype(x* y) j ;
decltype(&x) k ;
cout << typeid(j).name() << endl;
cout << typeid(k).name() << endl;
//使用场景
//1.传类型
vector<decltype(x* y)> v;
//2.函数内部
Func(1, 'a');
return 0;
}

5.容器的增加

5.1array[useless]

在这里插入图片描述

数组是固定大小的序列容器:它们包含按严格线性序列排序的特定数量的元素。在内部,数组除了包含的元素之外,不保留任何数据(甚至不保留其大小,这是一个模板参数,在编译时固定)。就存储大小而言,它与使用该语言的括号语法([])声明的普通数组一样高效。这个类只添加了一层成员和全局函数,这样数组就可以用作标准容器。与其他标准容器不同,数组具有固定大小,并且不通过分配器管理其元素的分配:它们是封装固定大小元素数组的聚合类型。因此,它们不能动态地展开或收缩(请参阅可以展开的类似容器的矢量)。零大小的数组是有效的,但不应取消对它们的引用(成员前、后和数据)。与标准库中的其他容器不同,交换两个数组容器是一种线性操作,涉及单独交换范围中的所有元素,这通常是一种效率低得多的操作。另一方面,这允许两个容器中元素的迭代器保持其原始容器关联。数组容器的另一个独特特性是,它们可以被视为元组对象:<array>标头重载get函数以访问数组的元素,就像它是元组一样,以及专门的tuple_size和tuple_element类型。

C++大佬太想把C++做的完美了 想把它搞得更泛型 替代了C语言的静态数组 另外 [ ]可以检查越界 但是vector可以实现她所实现的功能

5.2forward_list[useless]

在这里插入图片描述

比起list而言,每个节点可以节省一个指针的空间
头插头删是效率较高
但是现在一般都不缺内存 用list更好

在这里插入图片描述

5.3unordered_map/unordered_set

由[哈希/散列]模拟实现[unordered_map/unordered_set] (手撕迭代器)
在这里插入图片描述

5.4统一增加

1、为容器增加支持initializer_list的构造函数
2、增加cbegin和cend系列迭代器接口
在这里插入图片描述
在这里插入图片描述
3.移动构造/移动赋值
4.右值引用插入接口函数

6.知乎文章

C++23的目标

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

系统韧性研究(1)| 何谓「系统韧性」?

过去十年&#xff0c;系统韧性作为一个关键问题被广泛讨论&#xff0c;在数据中心和云计算方面尤甚&#xff0c;同时它对赛博物理系统也至关重要&#xff0c;尽管该术语在该领域不太常用。大伙都希望自己的系统具有韧性&#xff0c;但这到底意味着什么&#xff1f;韧性与其他质…

“AI大模型+电子签”,下一站在哪?

大模型所带来的数据分析、训练能力&#xff0c;将使得一些厂商的数据优势被逐渐放大&#xff0c;打造自身的差异化&#xff0c;打破电子签赛道同质竞争的局面。 作者|斗斗 编辑|皮爷 出品|产业家 AI大模型爆发以来&#xff0c;参与者众多。在电子签领域&#xff0c;这个…

前端代码重复度检测

在前端开发中&#xff0c;代码的重复度是一个常见的问题。重复的代码不仅增加了代码的维护成本&#xff0c;还可能导致程序的低效运行。为了解决这个问题&#xff0c;有许多工具和技术被用来检测和消除代码重复。其中一个被广泛使用的工具就是jscpd。 jscpd简介 jscpd是一款开…

格式转换 ▏Python 实现Word转HTML

将Word转换为HTML能将文档内容发布在网页上&#xff0c;这样&#xff0c;用户就可以通过浏览器直接查看或阅读文档而无需安装特定的软件。Word转HTML对于在线发布信息、创建在线文档库以及构建交互式网页应用程序都非常有用。以下是用Python将Word转换为HTML网页的攻略&#xf…

软件测试/测试开发丨校招推荐-中控技术股份有限公司岗位开放

软件测试工程师 岗位职责 1.参与软件项目需求分析&#xff0c;根据需求制定测试方案&#xff0c;设计测试用例&#xff0c;输出测试报告&#xff1b; 2.实施软件测试&#xff0c;对产品的接口、功能、性能等方面的测试负责&#xff1b; 3.针对项目中的问题进行跟踪分析和报…

从一个咖啡机提取一个嵌入式前端应用

学习一下除C或系统外的另一种嵌入式程序编写方法&#xff0c;JavaScript用于UI的设计与串口设备的控制 设备是基于SSD202芯片&#xff0c;dispinit初始化LCD&#xff0c;mplayer为程序需要用到视频播放程序&#xff0c;感觉开发效率会比较高及用户体现会比较好&#xff0c;毕竟…

新书免费领 | 数睿数据参编的《零基础学低(无)代码》图书正式发行

由中国工业出版集团、电子工业出版社出版的《零基础学低&#xff08;无&#xff09;代码》图书现已正式对外发行&#xff0c;目前已在多个购书平台和阅读平台上线。 本书由中国软件行业协会应用软件产品云服务分会秘书长曹开彬、清华大学软件学院副研究员刘英博主编。数睿数据…

智能工厂:APS高级计划排程系统成为了制造业建设智能工厂的核心必要需求

近年来&#xff0c;中国经济受到了许多因素的影响&#xff0c;例如新冠疫情冲击和国内外经济环境的巨大变化&#xff0c;随着我国人口红利的减少和人力成本逐步的增加&#xff0c;不论是中大型或小微制造企业为了提高市场竞争力并降低生产成本&#xff0c;都纷纷开始规划建设数…

实用!生产车间管理方案(万人收藏)

生产车间怎么管理&#xff1f; 发现大多数是车间管理普遍存在的问题&#xff0c;本文总结了以下几个方面&#xff1a; 1、制度管理 &#xff08;1&#xff09;没有明确的生产计划&#xff0c;生产流程混乱 &#xff08;2&#xff09;没有准确的记录和跟踪 2、人员管理&…

MySQL分页排序注意事项

最近测试发现个bug&#xff0c;同一个列表&#xff0c;分页选择展示10条数据时和展示20条数据时&#xff0c;展示20条数据不是展示10条数据下10条数据&#xff0c;数据有所错乱&#xff0c;如下图示。 SELECTid,no,year,quarter,dept_id,dept_name,create_time FROMlist_list …

Blender:制作一个变形动画

就是一个球逐渐地变为一个立方体 首先创建一个球和一个立方体 然后把两个物体放在一起&#xff0c;放缩球&#xff0c;让球包含立方体 之后选中球&#xff0c;为其添加修改器&#xff0c;缩裹 在这里选择缩裹对象为立方体 然后在应用下拉箭头中选择“应用为形态键” 下一步选中…

文件混淆-界面介绍

​ 介绍文件混淆界面功能选项和操作流程 文件混淆-界面介绍 文件混淆功能区域包括3个功能区&#xff1a;顶部显示过滤区、中间文件列表区、底部的是否混淆开关 ​ 顶部介绍 显示控制区域&#xff0c;这个区域用来辅助显示过滤查看文件&#xff0c;不会修改文件显示方式&am…

vue3学习源码笔记(小白入门系列)------provide和 inject 跨层级数据传递原理

目录 前言provideinject 总结 前言 需要从父组件向子组件传递数据时&#xff0c;会使用 props。对于层级不深的父子组件可以通过 props 透传数据&#xff0c;但是当父子层级过深时&#xff0c;数据透传将会变得非常麻烦和难以维护。 而依赖注入则是为了解决 prop 逐级透传 的问…

python 将字节字符串转换成十六进制字符串

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 想将一个十六进制字符串解码成一个字节字符串或者将一个字节字符串编码成一个十六进制字符串 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ python源码、…

深入理解Kafka分区副本机制

1. Kafka集群 Kafka 使用 Zookeeper 来维护集群成员 (brokers) 的信息。每个 broker 都有一个唯一标识 broker.id&#xff0c;用于标识自己在集群中的身份&#xff0c;可以在配置文件 server.properties 中进行配置&#xff0c;或者由程序自动生成。下面是 Kafka brokers 集群自…

电脑出现msvcr120.dll文件缺少怎么办-缺少msvcr120.dll文件修复方法

电脑出现 msvcr120.dll 丢失的情况&#xff0c;通常是由于系统文件损坏、软件冲突、病毒感染等原因引起的。为了解决这个问题&#xff0c;这里提供了 6 种修复方法&#xff0c;以及关于 msvcr120.dll 文件的详细介绍和丢失原因。 6 种修复方法&#xff1a;第一&#xff1a;利用…

重庆建筑模板厂家有哪些?

重庆地区的建筑施工企业在寻找可靠的建筑模板供应商时&#xff0c;广西贵港市能强优品木业是一个备受推崇的选择。作为建筑模板生产的优秀供应商之一&#xff0c;能强优品木业不仅能提供高质量的建筑模板&#xff0c;还可提供整车物流包运输&#xff0c;并将货物发货至重庆各地…

《持续交付:发布可靠软件的系统方法》- 读书笔记(一)

持续交付&#xff1a;发布可靠软件的系统方法&#xff08;一&#xff09; 第一章 软件交付的问题1.1 引言1.2 一些常见的发布反模式1.2.1 反模式&#xff1a;手工部署软件1.2.2 反模式&#xff1a;开发完成之后才向类生产环境部署1.2.3 反模式&#xff1a;生产环境的手工配置管…

### Cause: dm.jdbc.driver.DMException: 第 9 行, 第 85 列[is]附近出现错误: 语法分析出错

问题出现 (case when pcf.CONTRACTS_DURATION_UNITS || pcf.CONTRACTS_DURATION_UNITS is null then null else M end)contractsDurationUnits,(case when pcf.CONTRACTS_DURATION_UNITS_NAME || pcf.CONTRACTS_DURATION_UNITS_NAME is null then null else 月 end)contrac…

如何公网远程访问本地群晖NAS File Station文件夹

公网环境下如何内网穿透读写群晖NAS文件&#xff1f; File Station 是 群晖Synology NAS 的集中化文件管理工具。我们可以在局域网内登陆nas web界面通过 File Station管理群晖nas中的文件&#xff0c;如果我们在户外&#xff0c;有读写家中群晖nas中文件的需求怎么办&#xf…