C++11新增特性:列表初始化(std::initializer_list)& decltype、auto、nullptr、范围for

无网络环境部署:手动获取并安装OneNote for Windows 10完整指南 本文提供了一份详尽的OneNote for Windows 10离线安装指南。针对无网络或内网隔离环境,详细介绍了如何从官方渠道获取正确的产品ID,利用第三方工具下载纯净的.appxbundle安装包,并解决系统兼容性与依赖框架问题。最后,通过PowerShell管理员命令完成安全部署,是IT管理员和高级用户在离线环境下部署UWP应用的实用参考。 阅读详情

一、C++11新增统一初始化方式

1.1 新增方式

 在C++98之前,{}一般被用于对数组或结构体元素的统一的列表初始值设定。

struct Date
{
	int year;
	int monday;
	int day;
};

int main()
{
	int arr[5] = { 1, 2 ,3, 4, 5 };
	Date d = { 2024, 4 ,14 };
	return 0;
}

 C++11扩大了初始化列表的使用范围,可用于所有的内置类型和自定义类型的初始化。并且在使用初始化列表时,等号可省略!!

struct Date
{
	int year;
	int monday;
	int day;
};

int main()
{
	int arr[5]{ 1, 2 ,3, 4, 5 };//省略等号
	int i{ 1 };//初始化列表初始化内置类型,等价于int i = 1;或int i = {1};
	Date d{ 2024, 4 ,14 };//省略等号


	//C++中,初始化列表使用于new表达
	//本质上是用花括号中的值生成一个initializer_list对象,在调用对于的构造函数
	int* p = new int[5]{ 1, 2, 3 };
	return 0;
}

 在C++11中,初始化类列表可用于容器默认构造函数和拷贝复制函数的统一初始值设定!!

【部分容器使用示例】:

int main()
{
	//构造函数的初始值设定
	vector<int> v{ 1, 2, 3, 4, 5 };
	list<int> l{ 1, 2, 3, 4, 5 };
	map<string, string> m{  
		{"排序", "sort"},
		{"快排", "qsort"},
		{"水果", "fruits"}
	};

	//拷贝复制的初始值设定
	vector<int> v1;
	v1 = { 1, 3 ,5 ,7, 9 };
	list<int> l1;
	l1 = { 1 ,3 ,5, 7, 9 };
	return 0;
}

1.2 初始化容器底层原理(std::initializer_list)

std::initializer_list使用文档介绍

在C++11中,几乎所有的容器都新增了std::initializer_list作为参数的构造函数和赋值重载函数,这样初始化容器对象就更方便了。

【以vector为例】:
在这里插入图片描述


 在执行vector<int> v{ 1, 2, 3, 4, 5 };该种语句时,编译器会用花括号中的值1, 2, 3, 4, 5构造出一个initializer_list对象。在通过调用容器中以initializer_list作为参数的默认构造函数来生成对象v(拷贝赋值函数工作原理一样)
 更具体的说,编译器会通过迭代器依次获取initializer_list对象中的值,然后调用容器插入相关接口插入数据。
【下面以vector为例,实现过程】:

namespace Myvector
{
	template<class T>
	class vector
	{
		typedef T* iterator;
	pubilc:
		vector<T>(initializer_list<T> l)
		{
			_start = new T[l.size()];
			_finish = _start + l.size();
			_endofstorage = _finish;

			iterator vit = _start;
			typename initializer_list<T>::iterator lit = l.begin();
			while (lit != l.end())
			{
				*vit++ = *lit++;
			}
		};

		vector<T>& operator=(initializer_list<T> l)
		{
			vector<T> tmp(l);
			std::swap(_start, tmp._start);
			std::swap(_finish, tmp._finish);
			std::swap(_endofstorage, tmp._endofstorage);
			return *this;
		}

	priceate:
		iterator _start = nullptr;
		iterator _finish = nullptr;
		iterator _endofstorage = nullptr;
	};
}

二、新增声明

2.1 decltype

 在C++中,我们可以通过typeid().name()获取变量类型。但获取到的变量类型是以字符串形式显示的,无法作为类型定义变量继续使用。
 在C++11中,新增关键字decltype。decltype可以将变量类型声明为表达式的指定类型!!

int main()
{
	int x = 2;
	double d = 4.2;
	cout << typeid(x).name() << "     " << typeid(d).name() << endl;
	//error typeid(x).name()获取到的信息是一个字符串
	//typeid(x).name() ret; 

	decltype(x * d) ret;//将ret声明为dobule
	cout << typeid(ret).name() << endl;
	return 0;
}

【运行结果】:
在这里插入图片描述

2.3 auto & nullptr & 范围for

 有关C++11新增关键字和相关用法参考:CPP弥补了C的哪些缺陷及C++11新增特性

《数学建模与数学实验》第5版 线性规划 习题3.4 1. 某鸡场有1000只鸡,用动物饲料和谷物混合喂养. 2. 某工厂用A1,A2两台机床加工B1,B2,B3三种不同零件. 3. 某工厂利用两种原料甲、乙生产$A_1、A_2、A_3$三种产品. 4. 每班的护士在值班开始时向病房报到,连续工作8个小时. 5. 某工厂生产 A1 、A2 两种型号的产品 6. 有两个煤厂A,B 7. 某工厂制造三种产品,生产这三种产品需要三种资源 8. 已知某工厂计划生产1,2,3三种产品,各产品需要在ABC设备加工。... 阅读详情

相关推荐

LilyPad三色LED共阳极控制:从原理到Arduino编程实战

RGB LED作为可编程光源的核心组件,通过红、绿、蓝三原色的加色混合原理,能够生成丰富的色彩。其内部结构主要分为共阳极和共阴极两种类型,这决定了驱动电路的设计和编程逻辑。在电子织物和可穿戴设备领域,掌握RGB LED的控制技术对于实现动态光效和交互反馈至关重要。本文以LilyPad三色LED为例,深入解析其共阳极特性,并详细演示如何结合Arduino进行PWM编程,从而精准控制颜色与亮度,为智能服装、互动艺术装置等项目提供可靠的照明解决方案。

weixin_30237719的博客 606

【C++杂货铺】C++11特性总结:列表初始化 | 声明 | STL的升级

本篇文章介绍了C++11中的三个新特性:列表初始化、声明、STL的升级

春人.的博客 6520

Android系统编译之Communication error with Jack server (35), try ‘jack-diagnose‘ or see Jack server log

jack server failed场景个人分析网上分析分析1分析2原因1:权限问题原因2:端口占用原因3:删除 TLSv1, TLSv1.1测试结论解决方案说明相关链接 场景 在进行Android系统开发时,在liunx编译时发生问题,描述如下: ninja: build stopped: subcommand failed. build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed make: *** [ninja_wrapper

weixin_43194854的博客 2401

【C++庖丁解牛】C++11---统一的列表初始化 | auto | decltype | nullptr | STL中一些变化

🍁在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。🍁不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。🎄从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。

RO-BERRY 2004

PHP 对接建行生活订单推送接口

php对接建行订单推送

qq_43647026的博客 561

MATLAB实现灰雁优化算法(GGO):从原理到实战的详细级教程

灰雁优化算法(GGO)是一种新型群体智能算法,模拟灰雁迁徙和觅食行为。算法通过领导更替机制、V形编队飞行和群体觅食策略,平衡全局探索与局部开发能力,具有收敛精度高、避免局部最优等特点。在MATLAB环境中,算法实现包括初始化种群、迭代更新领导雁、执行编队飞行和觅食行为等核心模块。用户可根据问题维度设置参数,通过收敛曲线和可视化分析评估性能。关键参数如领导更替频率、V形编队强度和觅食强度需根据问题复杂度调整,以获得最佳优化效果。该算法适用于各类优化问题,具有较好的鲁棒性和稳定性。

fx666_的博客 1212

【C++11】{}初始化、std::initializer_list、decltype、STL新增容器

十年磨一剑——C++11

m0_70980326的博客 1609

【Cadence】Virtuoso@LayoutXL 差分电路版图镜像同步技巧详解

本文详细介绍了在Cadence Virtuoso LayoutXL中实现差分电路版图镜像同步的技巧,包括核心需求、环境配置、分步操作指南及高级技巧。通过使用LayoutXL的Group功能,工程师可以高效保持差分电路的对称性,提升版图迭代效率,确保高速信号处理的稳定性。特别适用于深亚微米工艺下的差分放大器设计。

weixin_29215391的博客 323

【C++11】列表初始化、新式声明、范围for和STL中的变化

C++11新特性第一弹

有梦想的电信狗 1963

RK3568平台(camera篇)点亮imx586摄像头

mipi摄像头硬件确认点:1.供电:5V,2.8V,1.2V,1.8V,reset脚(硬拉3.3,上电的时候从低到高),pwron脚外接3.3V。2,时钟:MCLKOUT是24兆时钟。3.4组差分mipi线。mipi的data线的波形为方波。

weixin_49303682的博客 7258

停车位检测:基于YOLOv5与UI界面的实现

YOLOv5是YOLO(You Only Look Once)系列中的最新版本,它能够在单次前向传播中同时完成多个目标的定位与分类,因此被广泛应用于实时目标检测任务。与之前的版本相比,YOLOv5在精度和速度上得到了很大的优化,适合嵌入到实际的自动驾驶和智能交通系统中。YOLOv5使用了卷积神经网络(CNN)进行特征提取,并通过回归方法预测边界框、类别及置信度。高效的推理速度:YOLOv5采用了优化的模型结构,能够在保证精度的同时提供较快的推理速度。较高的精度。

YOLO 694

【C++课程学习】:C++11(C++发展,列表初始化,声明auto,typeid,decltype)

(下面介绍来源于---文心一言)⛳️起源阶段:1979年,丹麦计算机科学家比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)发现C语言在表达能力、可维性和可展性方面的不足,开始对其进行了一系列的改进。斯特劳斯特鲁普在贝尔实验室开始从事将C改良为带类的C()的工作。他希望开发一个既要编程简单、正确可靠,又要运行高效、可移植的计算机程序设计语言。而以C语言为背景,以Simula思想为基础的语言,正好符合他的初衷和设想。

路虽远,行则将至!事虽难,做则必成! 4978

SSE 传输过程中,丢失空格和回车符,怎么解决?

Server - Sent Events(SSE)即服务器发送事件,是 HTML5 中的一项 Web API,用于实现服务器向客户端浏览器推送实时数据的功能。

934

C++11新特性详解

相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率。在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。thread在线文档说明stdreturn0。...

AI_ELF的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【C++】C++11(统一列表初始化、声明、右值引用)

💬 hello!各位铁子们大家好哇。今日更新了C++11的相关内容相比于 C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中 约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言, C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更 强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多。

qinjh_的博客 3671

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C++】——C++11新特性

C++,这门在系统开发、游戏开发、嵌入式等众多领域都占据主导地位的编程语言,一直在不断进化。C++11就像是C++家族中的一颗璀璨明星,闪耀着无数令人惊叹的新特性。如果你还在使用传统的C++编码方式,那你可能正在错过许多现代编程的便捷与高效。想象一下,用更少的代码编写出性能更高的程序,轻松应对复杂的并发场景,还能享受更加简洁和安全的内存管理。C++11就能让这一切成为现实。在这篇博文中,我会一点点揭开C++11新特性的神秘面纱,让你看到C++在这次重大更新之后所蕴含的无限潜力。

2402_85267481的博客 1875

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【C++航海王:追寻罗杰的编程之路】C++11(一)

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。

枫叶丹4的博客 2544

【C++11】:统一的列表初始化|声明|STL变化

对于c++11新特性的总结( ´◔︎ ‸◔︎`)

B1ue还在专注 1966

【C++】语法简化和增强,C++11都做了什么?

相比于C++98,C++11在C++98的基础上进行了大量的改进和扩展,包含了很多新特性,也包括对一些缺陷的修正,这些新特性和改进不仅提高了代码的质量和效率,还为开发者提供了更强大的工具和更灵活的编程方式。

小羊的博客 1456

【C++】—— 简述C++11新特性

C++11 新特性的介绍

m0_56069910的博客 966

【C++11】C++11常用特性详解

自C++11开始,C++就有点新语言的味道了。

学了就忘是正常现象 1417

[C++][C++11][一] -- [统一的列表初始化][声明][范围for循环][智能指针][STL中一些变化][新的类功能]

[C++][C++11][一] -- [统一的列表初始化][声明][范围for循环][智能指针][STL中一些变化][新的类功能]

SnowK博客 5029

C++11的更新介绍(初始化、声明、右值引用)

我们今天学习了初始化、声明以及右值引用三个点,大概是学完了一半,剩下的就下次再讲啦。🥰创作不易,你的支持对我最大的鼓励🥰🪐🪐。

2301_79551553的博客 1388

【C++ 第十八章】C++11 新增语法(1)

C++11 出现与历史、{}花括号统一初始化、initializer_list 初始化列表、auto、decltype、nullptr、STL的一些新变化

从不依靠,从不寻找,非常沉默,非常骄傲。 你必须非常努力,才能看起来毫不费力。 1578

C++11初探(一):初始化列表-范围for-新增关键字-STL新容器

C++11新特性解析:现代C++编程革新 本文系统介绍了C++11标准带来的重要语法改进与特性更新。主要内容包括:1) 统一的列表初始化语法({}初始化)及其原理;2) std::initializer_list容器在STL中的应用;3) 自动类型推导(auto/decltype)机制;4) 空指针安全关键字nullptr;5) 范围for循环语法;6) final/override关键字对继承体系的控制;7) 新容器类型(array/forward_list/unordered系列)的引入。通过对比传统C

2302_79947392的博客 1069

C++11 新特性基础

介绍C++11的 列表初始化、声明、范围for、STL的新增容器

cp 1413
上一篇: 【Linux 网络(一)】初识网络,理解TCP/IP五层模型
下一篇: C++11重大新增特性:左值引用 & 右值引用 & 移动构造 & 移动赋值
小白debug~
小白debug~ 新星创作者: C/C++技术领域 新星创作者: C/C++技术领域
博客等级 码龄4年 3510粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白debug~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值