初始化列表

news2024/11/19 19:24:12

文章目录

  • 一. 初始化列表是什么?
  • 二. 为什么要有初始化列表?
  • 三. 初始化列表的特性
  • 四. explicit关键字
  • 五. statis成员
  • 六. 友元
  • 七. 内部类
  • 八. 匿名对象
  • 九. 编译器优化
  • 总结:

一. 初始化列表是什么?

初始化列表是构造函数真正初始化的地方,不管你是否写了构造函数或者是否显示写了初始化列表,构造函数都会走初始化列表,进行对象的初始化;
简单的说:初始化列表就是构造函数真正进行初始化的地方!!!

二. 为什么要有初始化列表?

  1. 语法设置特性就是如此。
  2. 有三种情况必定需要初始化列表进行初始化。
  1. 拥有const 属性的常变量。因为const 初始化之后就不能变了。
  2. 引用类型的变量,因为引用特性初始化之后不能再变成别人的引用了。
  3. 没有默认构造的自定义成员变量。

三. 初始化列表的特性

  1. 初始化列表的使用方式:在构造函数口号后面先加一个 :(冒号),然后写成员变量,再在成员变量后面加括号,括号里面进行初始化,用逗号对后面的成员变量进行分割;
    在这里插入图片描述
  2. 构造函数的初始化顺序是跟成员变量的先后顺序是一样的,如上图所示:要是先定义变量a1,后定义a2,初始化列表就会先初始化a1,后初始化a2,反之就先初始化a2,后初始化a1;要是上图是后者,则a2是任意值,不确定的,因为a2是用a1初始化的,而a2先于a1初始化,这个时候a1还是任意值;
  3. 对于自定义类型和内置类型的区别:
  1. 要是显示写了初始化列表,则直接走初始化列表,不管是内置类型还是自定义类型;
  2. 要是没有显示写初始化列表,内置类型不做处理,自定义类型调用对应的构造函数;这里注意:要是自定义类型没有默认构造函数,编译报错!!!

四. explicit关键字

  1. 可以对一个参数的构造函数进行隐式类型转换,比如string的拷贝构造可以直接用一个字符串直接构造 如 string s = “hello world”;这样看上去想赋值重载,其实是拷贝构造,而且拷贝构造的参数是string类型,但是这里直接是字符串,这里就是会隐式类型转换,也可以参数是int类型的,直接传一个整数常量,也是一样的;
  2. 要是不要它进行隐式类型转换,在构造函数前面加上explicit关键字就可以禁止!!!

五. statis成员

  1. 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化(const修饰的整形类型可以用缺省值)
  2. statis成员是所有对象共享的,无论是成员变量还是成员函数;它是存放在静态区的。
  3. statis修饰的成员变量一定要类外初始化,不用加statis关键字,类中的只是声明。
  4. statis修饰的成员可以直接用类名::成员访问(前提是公有),因为它不在对象里;
  5. statis修饰的成员函数没有this指针,故不能访问具体对象的普通成员变量,只能访问statis修饰的成员变量。
  6. 静态成员同样受访问限定符的影响

六. 友元

  1. 友元分友元函数和友元类。
  2. 友元函数是普通函数,在类内任意地方,注意:是类内任意地方!!!将需要用私有和保护成员的普通函数前面加friend关键字的声明放在类内任意地方就行了。
  3. 一个函数可以是多个类的友元。
  4. 友元类是单向的,比如a类是b类的友元,则a类可以访问b类的所有成员,而b类还是只能访问a类的公有成员。
  5. 友元类不能传递,很好理解的,c是b的友元,b是a的友元,但是c不是a的友元。

七. 内部类

  1. 在类里面定义的类叫内部类。
  2. 内部类天然是外部类的友元。
  3. 我们可以看作内部类和两个定义在全局的类是一样的,sizeof(类名)大小是外部类的大小,跟内部类没有关系
  4. 只是访问内部类的时候会受外部类的范围限定符的影响。

八. 匿名对象

  1. 直接用 类名() 这样形式使用匿名对象,也就是没有对象名。
  2. 匿名对象只能在当前所在行使用!!!
  3. 如果是单参数构造,又可以使用隐式类型转换,简化到了极致。

九. 编译器优化

  1. string s = “hello world”,本来是先构造一个临时string,然后再拷贝构造的,编译器直接优化成用”hello world" 构造s。
  2. 传参的时候直接传一个string对象,第一个可以优化是直接传一个匿名对象,本来是要构造一个匿名对象,然后再拷贝构造参数,编译器直接用匿名对象的参数直接构造string。
  3. 还有一个就是返回值,返回值直接接收的话也会省掉中间拷贝构造,直接用返回值构造。

总结:

  • 语法确实杂和多,但是要理解它,不要背,坚持下去

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

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

相关文章

基于stm32的烟雾浓度检测报警proteus仿真设计(仿真+程序+讲解)

基于STM32的烟雾浓度检测报警仿真设计(仿真程序讲解) 1.主要功能2.仿真3. 程序4. 资料清单&下载链接 基于STM32的烟雾浓度检测报警仿真设计(仿真程序讲解) 仿真图proteus 8.9 程序编译器:keil 5 编程语言:C语言 设计编号&a…

Python编程

Lesson I 解rar压缩包的密码 1 下载Python并安装 网址: 注意选对是32 bit还是64 bit Python Releases for Windows | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downloads/windows/ 2 安装unrar pip install unrar 3 下载u…

JS中方法、函数、属性是一个东西吗

在 JavaScript 中,方法、函数和属性是相关但不完全相同的概念。 方法(Method):在对象中,方法是对象的属性,但它的值是一个函数。方法可以通过对象来调用,并且可以访问对象的属性和其他方法。 …

从《离婚律师》中学习代理模式

〇、前言 在2014年的时候,有一部非常火爆的电视剧叫做《离婚律师》,里面讲述了两名离婚律师池海东和罗郦的爱恨情仇,片子非常好看,当时我自己也怒刷了好几遍。 那么,在本剧的第四集中,有一段非常搞笑的剧情…

Linux学习之逻辑卷LVM用途和创建

理论基础 Linux文件系统建立在逻辑卷上,逻辑卷建立在物理卷上。 物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组…

新手小白如何租用GPU云服务器跑深度学习

最近刚学深度学习,自己电脑的cpu版本的pytorch最多跑个LexNet,AlexNet直接就跑不动了,但是作业不能不写,实验不能不做。无奈之下,上网发现还可以租服务器这种操作,我租的服务器每小时0.78人民币&#xff0c…

Linux驱动——Tiny4412芯片_Source Insight的下载+Linux3.5内核下工程的创建

文章目录 前言Source Insight的下载1.下载地址2.下载步骤 linux3.5内核下工程的创建 前言 本博客仅作为笔记总结,以及帮助有需要的人,不作权威解释。 Source Insight的下载 1.下载地址 官网:https://www.sourceinsight.com/ 另外可以选择…

【计算机网络】一文带你弄懂DNS解析过程(最强详解!!)

目录 首先了解一下什么是DNS协议吧 域名的结构 顶级域名 二级域名 根域名 DNS的查询方式 递归查询 迭代查询 完整域名解析系统 首先了解一下什么是DNS协议吧 DNS(Domain Name System)是一个用于将域名(例如www.example.com)…

BTC价格预测:灰度突如其来的胜利是否会打破“九月魔咒”?

加密市场即将进入第三季度交易的最后阶段,由于9月份被视为是比特币的下跌时期,大多数投资者都预测加密货币之王将会进一步下跌。然而,事情却发生了逆转,灰度突如其来的胜利是否会打破“九月魔咒”? 受该事件影响&#…

15.坐标添加带箭头的线

ol的官网示例中有绘制带箭头的线的demo&#xff0c;那个是交互式绘制&#xff0c;而不是根据经纬度坐标添加&#xff0c;在其基础上稍作修改&#xff0c;即可转为通过经纬度添加带箭头的线的功能&#xff0c;线和箭头的粗细大小样式都可以自定义 代码如下 <!DOCTYPE HTML P…

【工程实践】使用git clone 批量下载huggingface模型文件

前言 经常需要下载模型到服务器&#xff0c;使用git clone方法可以快速实现模型下载。 1.选定要下载的模型 以下载moka-ai/m3e-base为例&#xff0c;切换到Files and versions。 2.更改下载网页的url 如上图所示&#xff0c;当前要下载模型网页的url为&#xff1a; https://hu…

【C++初阶】反向迭代器的实现

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

【高阶产品策略】策略价值量化之数据指标

文章目录 1、数据指标概述2、通用指标3、WEB端常用指标4、移动端常用指标5、如何选择一个合适的数据指标 1、数据指标概述 2、通用指标 3、WEB端常用指标 4、移动端常用指标 5、如何选择一个合适的数据指标

无涯教程-Android - Style Demo Example函数

下面的示例演示如何将样式用于单个元素。让我们开始按照以下步骤创建一个简单的Android应用程序- 步骤说明 1 您将使用Android Studio IDE创建一个Android应用程序,并在 com.example.saira_000.myapplication 包下将其命名为 myapplication ,如中所述您好世界Example一章。 2 …

《高效职业人》考试试题及答案截图

中电金信新员工入职培训选修课《高效职业人》考试答案截图

稳恒电路直观理解

图v0 图v1 图v2 图v3 图v4 自由正电荷s&#xff0c;定向移动过程中&#xff0c;在任何一位置处受力都是平衡的&#xff0c;即s所受总合力为0&#xff0c; 即s处于匀速运动&#xff1a;直导体中匀速直线运动、拐弯处匀速圆周运动 起初t0时刻, s的势能是最高的E0&#xff0c;之…

出口管制升级!限制英伟达向中东地区出口AI芯片 | 百能云芯

8月31日消息&#xff0c;根据1份监管报告显示&#xff0c;原先美国限制英伟达先进人工智能芯片出口至中国&#xff0c;现在拟计划进一步扩大到中国以外的其他地区&#xff0c;包括中东一些国家。 据《路透》报道&#xff0c;美国通常是出于国家安全原因&#xff0c;实施出口管制…

头歌MYSQL——课后作业6 函数

第1关&#xff1a;数值函数 任务描述 本关任务&#xff1a;对表达式取整 相关知识 四舍五入的函数 ROUND(X,D) 返回X&#xff0c;其值保留到小数点后D位&#xff0c;而第D位的保留方式为四舍五入。 若D的值为0,则对小数部分四舍五入。 若将D设为负值&#xff0c;保留X值小数…

Threejs里执行对象的多个动画

承接上文&#xff0c;本文讲述如何在Threejs里播放对象的多个动画&#xff0c;这也是研究了很久才解决的… 一 导出模型 在Blender里按照File->Export&#xff0c;选择glTF2.0 然后在弹框的右上角选择导出为glTF Embedded (.gltf) 这样就把模型导出来了&#xff0c;该模…