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

news2024/9/28 1:25:01

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

  • 一、C++11新增统一初始化方式
    • 1.1 新增方式
    • 1.2 初始化容器底层原理(std::initializer_list)
  • 二、新增声明
    • 2.1 decltype
    • 2.3 auto & nullptr & 范围for

一、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中,新增关键字decltypedecltype可以将变量类型声明为表达式的指定类型!!

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新增特性

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

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

相关文章

零基础 Tomcat 环境搭建(图解)

目录 介绍 下载 安装 环境配置 启动服务 无法正常启动的可以去更改端口号 显示乱码的可以去更改为BGK 正常启动 ​编辑 浏览器URL测试 关闭服务 静态项目测试 创建部署 创建任意文件夹 编写测试内容 浏览器URL测试 介绍 Tomcat是Apache 软件基金会&#xff08…

如何整理自己的电脑桌面?桌面整理怎么设置更高效?一文详细解答

在数字化时代&#xff0c;电脑已成为我们日常生活和工作中不可或缺的工具。然而&#xff0c;随着时间的推移&#xff0c;电脑桌面上往往会堆积起各种文件、快捷方式、文件夹&#xff0c;使得原本整洁的桌面变得杂乱无章。这不仅影响了我们的工作效率&#xff0c;还可能对心情造…

骨传导耳机哪个牌子最好?硬核测评五大热门王牌骨传导耳机!

在当今快节奏的生活中&#xff0c;音乐和音频内容已成为许多人日常生活中不可或缺的一部分。无论是在健身房锻炼、户外跑步&#xff0c;还是在办公室工作&#xff0c;一款优质的耳机都能提供沉浸式的听觉体验&#xff0c;同时确保安全和舒适。骨传导耳机&#xff0c;作为一种创…

深入学习电路基础:从理论到实践

引言 电路是电子学的核心&#xff0c;也是现代科技的基石。从简单的灯泡开关到复杂的计算机处理器&#xff0c;电路在各类电子设备中都起到了至关重要的作用。深入学习电路知识不仅有助于理解电子设备的工作原理&#xff0c;还能够为实际设计和开发电子产品打下坚实的基础。 …

JVM下篇:性能监控与调优篇-02-JVM监控及诊断工具-命令行篇

文章目录 2. JVM 监控及诊断工具-命令行篇2.1. 概述2.2. jps&#xff1a;查看正在运行的 Java 进程2.3. jstat&#xff1a;查看 JVM 统计信息2.4. jinfo&#xff1a;实时查看和修改 JVM 配置参数2.5. jmap&#xff1a;导出内存映像文件&内存使用情况2.6. jhat&#xff1a;J…

将弹性 IP 地址绑定到 EC2 实例

在本文中&#xff0c;九河云将带你了解如何将弹性 IP 地址绑定到 Amazon Elastic Compute Cloud (EC2) 实例。绑定弹性 IP 可以为您的实例提供一个固定的公共 IP 地址&#xff0c;有助于保持外部访问的稳定性。 准备工作 在开始之前&#xff0c;请确保您已完成以下准备工作&a…

Context-Aware Depth and Pose Estimation for Bronchoscopic Navigation翻译

文章目录 摘要1.引言2. 相关工作3. 方法概述3.1. 基于CT数据的虚拟深度生成3.2. 基于视频帧的上下文感知深度估计3.3. 方法概述3.3.1. 从CT数据生成虚拟深度图3.3.2. 基于上下文感知的深度估计从视频帧中3.3.3. 相机姿态估计通过 2D/3D 配准 4. 实验4.1. 数据集和基线4.2. 实现…

【无标题】【Datawhale X 李宏毅苹果书 AI夏令营】批量归一化

1、批量归一化的作用 批量归一化&#xff08;Batch Normalization&#xff0c;BN&#xff09;的把误差曲面变得平滑&#xff0c;使训练能够得到快速收敛&#xff1b; 训练过程的优化&#xff1a;使用自适应学习率等比较进阶的优化训练方法&#xff1b; 训练对象的优化&#xf…

基于协同过滤算法商品推荐系统设计与实现

协同过滤算法商品推荐系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装协同过滤算法商品推荐…

v-bind后面不加属性和v-bind的动态属性

v-bind 平常常见的用法我们应该都知道&#xff0c;说一说 v-bind 的不常用的方式&#xff0c;第一个就是 v-bind 后面直接不添加任何属性&#xff0c;此时会将一个对象的所有 property 都作为 prop 传入 先看官网的说法案例&#xff1a; 父组件&#xff1a; <templat…

海外合规|新加坡网络安全认证计划简介(二)-Cyber Essentials

一、 认证简介&#xff1a; Cyber Essentials 标志是针对开始网络安全之旅的组织的网络安全认证。它针对的是中小企业 (SME) 等组织。一些中小企业的 IT 和/或网络安全专业知识和资源有限&#xff1b;Cyber Essentials 标志旨在使他们能够优先考虑必要的网络安全措施&#xff…

C++ | Leetcode C++题解之第390题消除游戏

题目&#xff1a; 题解&#xff1a; class Solution { public:int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step …

如何将pdf文档翻译英语?4招教会你

在全球化的商业环境中&#xff0c;与海外客户沟通是常态。 当你需要将pdf文档翻译成英语时&#xff0c;会怎么做呢&#xff1f;是上网查找翻译工具还是求助同事完成翻译任务&#xff1f; 其实我有更好的解决办法&#xff0c;可以通过一些免费且实用的技巧&#xff0c;可以帮助…

安卓13删除app 链接库警告弹窗Detected problems with app native

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码修改彩蛋1.前言 有些客户的APP,打开首次会弹窗提示窗口, Detected problems with app native libraries (please consult log for detail):,需要删除这个窗口,避免挡住用户APP。而且这个提示有些app是以t…

上海亚商投顾:深成指、创业板指均涨超1%,华为产业链反复活跃

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 大小指数昨日走势分化&#xff0c;沪指全天震荡调整&#xff0c;2800点失而复得&#xff0c;深成指、创业板指…

如何用W外链创建一个永久不变的活码?

"W外链"这个术语不是一个标准的技术术语&#xff0c;因此我假设你可能是指的是“外链”或者“网址链接”的活码。活码的优势在于它可以提供一个永久不变的二维码&#xff0c;而背后的链接或内容可以灵活地进行更新和修改。以下是创建活码的一般步骤和优势&#xff1a…

PCI Express 体系结构导读摘录

系列文章目录 文章目录 系列文章目录术语第Ⅰ篇  PCI 体系结构概述第 1 章  PCI 总线的基本知识1. 1  PCI 总线的组成结构1. 1. 1  HOST 主桥1. 1. 2  PCI 总线1. 1. 3  PCI 设备1. 1. 4  HOST 处理器1. 1. 5  PCI 总线的负载 1. 2  PCI 总线的信号定义1. 2. 1  地址…

web前端-网页

一、网页 1.网页 网站是指在因特网上根据一定的规则&#xff0c;使用 HTML等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”&#xff0c;通常是 HTML格式的文件&#xff0c;它要通过浏览器来阅读。 网页是构成网站的基本元素,它通常由图片、链接、文字、声…

作为中级前端工程师,每天都做些什么?

一直以来都没有记录或总结过自己每天工作模式和状态&#xff0c;以至于说回想起刚毕业参加工作的时候&#xff0c;作为一个初级开发&#xff0c;做事凭借着满腔热情&#xff0c;花的时间多&#xff0c;但成长是否成正比呢? 今天分享一下自己当前的工作状态&#xff0c;其一是…

实验二 Java基础语法练习

实验目的及要求 目的&#xff1a; 掌握各种变量的声明方式掌握Java的基本数据类型、运算符与表达式的使用方法。理解Java的程序语法结构&#xff0c;掌握顺序结构、选择结构和循环结构语法的程序设计方法。通过以上内容&#xff0c;掌握Java语言的编程规则 要求&#xff1a; …