【C++11】初始化列表、decltype操作符、nullptr

news2025/1/12 1:46:32

目录

一、初始化列表

1.1 花括号初始化

1.2 initializer_list

二、decltype

三、nullptr


一、初始化列表

1.1 花括号初始化

在C++98中,标准允许使用花括号{ }对数组或结构体元素进行统一的列表初始值设定。

而在C++11推出后,使用初始化列表时,可添加等号(=),也可不添加。

 创建对象时也可以直接使用初始化列表的方式调用构造函数进行初始化:

我们还可以在标准容器中使用初始化列表,这也是初始化列表的主要使用场景:

当然, initializer_list也支持可以被隐式类型转换的:

回顾一下string s1="1111" 这句代码的本质:string类调用char*型的构造函数构造出一个匿名string对象;然后将该匿名对象被拷贝构造给s1。然后编译器对该两步操作进行了优化,直接调用char*的构造函数创建出了s1,没有调用拷贝构造。该过程与隐式类型转化非常相似,本质并不是隐式类型转化。

 除了初始化,标准库还提供了赋值运算符重载。

 使用举例:

总结一下:

C++11以后一切对象都可以使用列表进行初始化。普通对象建议使用默认的初始化,常用容器有需求可以灵活使用初始化列表。 

1.2 initializer_list

std::initializer_list的介绍文档:

std::initializer_list

初始化列表initializer_list其实是C++标准库中的一个默认容器。

C++将花括号包围的内容当作initializer_list类型:

 initializer_list还提供了迭代器进行使用

 现在已知initializer_list是一个类,那C++标准库中的容器是如何支持initializer_list初始化的呢?

 其实就是提供了initializer_list作为参数的构造函数,这样就可以使vector支持initializer_list初始化了。接下来我们也可以模拟实现vector中的initializer_list作为参数的构造函数。

 测试:


二、decltype

首先我们要了解一下 typeid类,我们常用typeid中的name函数得到类型的字符串。

 而关键字decltype是将变量的类型声明为表达式指定的类型。即我们可以通过decltype拿到一个变量的类型,然后使用该表达式创建新的变量。

并且decltype和auto的功能还不一样   例如y2是int,而y3是double。

三、nullptr

我们来看看在C++中 NULL 的定义:

上面的代码的意思是如果没有没有定义NULL,并且为C++版本,则NULL被定义为字面量0,这样就可能会导致一系列问题,以为0既能表示指针常量,又能表示整形常量。所以出于清晰和安全的考虑,C++11中增加了nullptr表示空指针。

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

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

相关文章

java的方法使用

1.方法概述1.1什么是方法方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集注意:方法必须先创建才可以使用,该过程称为方法定义方法创建后并不是直接运行的,需要手动使用后才执行,该过程…

深入理解mysql性能优化以及解决慢查询问题

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql的索引分类&a…

GPT1、GPT2、GPT3原理

一 背景 GPT1:Generative Pre-Training。是一种生成式的预训练模型,由OpenAi团队发表自论文《Improving Language Understanding by Generative Pre-Training》。 h0=UWe+Wp 二 模型整体结构(宏观) 图1 GPT整体结构 左侧为模型的整体结构,由12个Transformer中的Decoder模块…

App的分类与简析

引言随着智能手机的普及,移动端应用几乎成为每个互联网产品的标配。在快速迭代的互联网战场中高效开发、低成本上线产品,是每个应用开发团队追求的目标。此时,选择合适的应用类型和开发模式便至关重要。移动应用可以粗分为三种:原…

Hystrix线程池隔离与接口限流

前面了解了Hystrix的请求缓存、fallback降级、circuit breaker断路器快速熔断,下面来看下Hystrix的线程池隔离与接口限流。 Hystrix通过判断线程池或者信号量是否已满,超出容量的请求,直接Reject走降级,从而达到限流的作用。限流是限制对后端服务的访问量,比如对MySQL、Re…

CentOS7 LVM 逻辑卷2种读写策略(磁盘IO性能优化)—— 筑梦之路

LVM 逻辑卷的读写策略有两种: linear:线性方式,一块块盘来读写,写完一块盘再写第二块盘、第 N 块盘,性能低striped:条带方式,多块盘一起并行读写,性能高查看 LVM 逻辑卷的读写策略的…

元宇宙,会成为下一代互联网的主场吗?

导语 | 2022 年元宇宙风靡全网,作为过去一年科技界的“当红扛把子”,引多家科技巨头“竞折腰”。近日,《福布斯》双周刊网站在报道中指出,2030 年全球元宇宙的市场规模有望高达 5 万亿美元,2023 年可能是确定其发展方向…

机器学习0 — 总体架构,chatgpt时代必须掌握的

1 从chatgpt看目前AI重要性 随着chatgpt的一声巨响,拉响了强人工智能的序幕。chatgpt相对于目前的各种机器人,简直就是弓箭和导弹的区别。沉寂了两三年后,AI如今又一次站在了人类工业的最高舞台。个人认为AI已经成为所有人,特别是…

vitest第二章(入门)

Vitest 是一个由 Vite 提供支持的极速单元测试框架 tips vite>3 node>14 安装 1.使用npm init -y 生成 package json 2.安装依赖 挑选一种即可 npm install -D vitestyarn add -D vitestpnpm add -D vitest3.新建一个文件calc.ts 开始第一个单元测试吧,…

【数据结构和算法】使用数组的结构实现链表(单向或双向)

上文我们通过结构体的结构实现了队列、以及循环队列的实现,我们或许在其他老师的教学中,只学到了用结构体的形式来实现链表、队列、栈等数据结构,本文我想告诉你的是,我们可以使用数组的结构实现链表、单调栈、单调队列 目录 前言…

2022最火科技~AIGC

2022年最火的信息科技~AIGC 人工智能内容生成 趣讲大白话:输入几个词,立刻生成机器创造的内容 ************** 从人工智能决策 走向 人工智能生成 人工智能决策:自动驾驶、抖音推荐算法 人工智能生成内容:即AI Generated Conten…

【算法练习】两个链表的第一个公共节点

描述输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: 0n≤1…

下一代编解码技术Ali266在视频超高清领域的应用展望

超高清与各领域的需求融合和创新正在发生。 2022年是一个体育大年,众多世界级体育赛事通过视频直播、转播等形式给观众带来畅爽的观看体验。 2022年北京冬奥会,实现了奥运会历史上首次赛事全程4K制作播出,并在开幕式上提供了8K超高清公共信号…

安全多方计算之五:零知识证明(从入门到入土。。)

零知识证明1. 简介2. 零知识证明的例子2.1 向红绿色盲证明红球、绿球2.2 数独的零知识证明2.3 三染色问题的零知识证明2.4 Quisquater-Guillou 零知识协议3. ElGamal加密的零知识证明3.1 ElGamal加密的已知明文证明3.2 ElGamal加密的二选一零知识证明3.3 ElGamal加密的1-out-of…

MATLAB - 查找数据峰值

语法如下: pks findpeaks(data) [pks,locs] findpeaks(data) [pks,locs,w,p] findpeaks(data) [___] findpeaks(data,x) [___] findpeaks(data,Fs) [___] findpeaks(___,Name,Value) findpeaks(___)where,pks是峰值返回值,locs是数据索…

特斯拉 FSD 背后的技术(1)—从 BEV 到占用网络

在今年 tesla 的 AI Day 给我这个业余自动驾驶爱好者给留下了深刻印象,在看过之后,通过收集资料对其中阐述的技术进行简单的了解,在这里拿出来跟大家分享一下,有点长,所以划分了一下 3 个部分。从 BEV 到占用网络激进无…

chrome查看网页性能

1 Performance 1.1 打开开发者工具(cmdshiftc) 1.2 打开Performance面板,点击录制按钮(开始录制) 1.3 刷新页面,再次点击录制按钮(结束录制) 录制按钮高亮,表示录制中…

算法训练营DAY47|198.打家劫舍、213.打家劫舍II 、337.打家劫舍III

这一期到了打家劫舍的专题,说是专题但实际上只有一期,而且只有三道题,我们把这三道题放在一起讲,第一道题简单一些,后两道略有不同方向上的难度。但总体来看第一次做可能有一点难想到思路,其实代码实现还是…

百度、字节终于不再相互“抄袭”

文|智能相对论作者|佘凯文“百度和字节跳动,分道扬镳”乍一看挺标题党的,这两个互联网巨头从没在一起过,又何来“分道扬镳”之说?不急,且往下看。众所周知,当前国内互联网行业,早已不是当初啥也…

【链表->环形链表】

诸如环形链表的结构有:尾节点链接向各个节点的链表,也可链向自己,称为环形链表。只要链表中带有环,均可称为环形链表。下面通过一些例题来详细讲述环形链表:1.给你一个链表的头节点 head ,判断链表中是否有…