c++的构造函数初始化列表

2023-11-15

C++类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:


class CExample {
public:
int a;
float b;
//构造函数初始化列表
CExample(): a(0),b(8.8)
{}
//构造函数内部赋值
CExample()
{
a=0;
b=8.8;
}
};上面的例子中两个构造函数的结果是一样的。上面的构造函数(使用初始化列表的构造函数)显式的初始化类的成员;而没使用初始化列表的构造函数是对类的成员赋值,并没有进行显式的初始化。

初始化和赋值对内置类型的成员没有什么大的区别,像上面的任一个构造函数都可以。对非内置类型成员变量,为了避免两次构造,推荐使用类构造函数初始化列表。但有的时候必须用带有初始化列表的构造函数:
1.成员类型是没有默认构造函数的类。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。
2.const成员或引用类型的成员。因为const对象或引用类型只能初始化,不能对他们赋值。

初始化数据成员与对数据成员赋值的含义是什么?有什么区别?
首先把数据成员按类型分类并分情况说明:
1.内置数据类型,复合类型(指针,引用)
在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的
2.用户定义类型(类类型)
结果上相同,但是性能上存在很大的差别。因为类类型的数据成员对象在进入函数体前已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,调用构造函数,在进入函数体之后,进行的是对已经构造好的类对象的赋值,又调用个拷贝赋值操作符才能完成(如果并未提供,则使用编译器提供的默认按成员赋值行为)

Note:
初始化列表的成员初始化顺序:
C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。
Example:


class CMyClass {
CMyClass(int x, int y);
int m_x;
int m_y;
};

CMyClass::CMyClass(int x, int y) : m_y(y), m_x(m_y)
{
}你可能以为上面的代码将会首先做m_y=I,然后做m_x=m_y,最后它们有相同的值。但是编译器先初始化m_x,然后是m_y,,因为它们是按这样的顺序声明的。结果是m_x将有一个不可预测的值。有两种方法避免它,一个是总是按照你希望它们被初始化的顺序声明成员,第二个是,如果你决定使用初始化列表,总是按照它们声明的顺序罗列这些成员。这将有助于消除混淆。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++的构造函数初始化列表 的相关文章

  • Unity使用VS编辑器打开项目失败解决办法

    Unity使用VS编辑器打开项目失败解决办法 解决过程 解决过程 具体表现为 项目文件 sln无法打开 打开脚本文件后无法关联到Unity编辑器 报错信息可能不同 参考出错表现即可 首先去清除有逻辑错误的代码 先注释掉 不然后面可能会无法自
  • python学习第二天

    1 什么是Python 免费开源 跨平台 面向对象 强类型 动态 解释型 的计算高级编程语言 2 与计算机交互 输入函数 input 提示信息 输出函数 print value sep end n sep 连接符 2或2个以上值的间隔方式
  • KeepChatGPT:让ChatGPT畅聊无阻的浏览器插件

    ChatGPT是一款强大的自然语言处理模型 但在使用过程中经常出现网络报错 刷新网页等问题 让使用体验大打折扣 而今天介绍的KeepChatGPT浏览器插件则能够有效解决这些问题 让ChatGPT畅聊无阻 KeepChatGPT是一款解决C
  • 2022年最新一篇文章教你青龙面板拉库,拉取单文件,安装依赖,设置环境变量,解决没有或丢失依赖can‘t find module之保姆教程(附带几十个青龙面板脚本仓库)

    没有安装青龙面板的先看我另外一篇教程2022年青龙面板部署完整版教程 多图 1 青龙面板拉库 先把配置文件config sh第20行改成我这样 GithubProxyUrl https pd zwc365 com cfworker 打开浏览
  • 已解决WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python

    已解决 pip升级报错 WARNING pip is configured with locations that require TLS SSL however the ssl module in Python is not availa
  • windows 7z命令行压缩

    windows 命令行用 7z 1 压缩一个文件夹 并排除其中一些文件和文件夹 参考 2 a 压缩的命令 r 递归 可能是压缩文件夹时用 但其实我试过没加这个参数 也能正常把文件夹内所有文件加进来 x 和 xr 排除一些文件 不加进最终压缩
  • 老司机带你入门Java基础概念

    因为学习所以收获 因为收获所以不寂寞 请关注 源码猎人 目录 Java简介 Java特性 Java环境概述 Java工作原理 面向对象 对象 类 方法 继承 封装 多态 变量 常见面试题 Java简介 Java是一门面向对象编程语言 Jav
  • jsp内置对象(自带的,不需要new也能使用的对象)9个

    1 out 向客户端输出内容 2 pageContext JSP页面容器 3 request 请求对象 存储客户端向服务端发送的请求信息 request数据只在同一次请求有效 request对象的常见方法 String getParamet
  • 仿lisp运算 测试通过

    LISP 语言唯一的语法就是括号要配对 形如 OP P1 P2 括号内元素由单个空格分割 其中第一个元素 OP 为操作符 后续元素均为其参数 参数个数取决于操作符类型 注意 参数 P1 P2 也有可能是另外一个嵌套的 OP P1 P2 当前
  • python有关vscode中报错 No module named 问题—pygame(亲测有效)

    在安装pygame中出现 module gt import pygame ModuleNotFoundError No module named pygame 问题 主要原因如下 1 没有安装pygame 1 终端输入pip install
  • php复选框实现单选

  • 视频相似性检测

    背景 完全一样的视频可以通过MD5判断 但视频可能因为压缩格式 缩放 明暗 尾部截断导致非完全一致 故需要对视频帧进行重复检测 非常相似定义 缩放 亮度 帧率 水印 格式变换等造成的视频差异 旋转的效果不佳 本文采用一秒一帧切帧 对每帧提取
  • 模型解释性:Lime包的使用

    1 模型可解释性 基于复杂数据挖掘方法构建的预测模型 通常存在 黑箱问题 导致其可解释性与可利用性降低 目前 机器学习模型可解释性总体上可分为2类 事前可解释性 指通过训练结构简单 可解释性好的模型或将可解释性结合到具体的模型结构中的自解释
  • boost::ptime的常用方法

    boost ptime的常用方法 主要介绍常用获取时间的方法 以及相互之间的转换 需要使用boost库 用到的头文件 boost timer timer hpp 和 boost date time hpp 获取本地时间 boost posi
  • Android:BaseAdapter的优化方案一览

    1 什么是数据适配器 用来建立数据源和数据渲染控件之间的关系 将数据的来源和数据的显示之间进行解耦 降低耦合性 2 BaseAdapter接口 BaseAdapter是一个抽象类 abstract 以下代码为android源码 public
  • Deep Java Library(四)使用DJL Serving部署JAVA模型 For Windows

    1 下载Windows版DJL Serving Windows版DJL Serving下载地址 https publish djl ai djl serving serving 0 23 0 zip 下载下来是一个zip压缩包 大约50M左
  • 一个好玩的编程小游戏—— 母牛生小牛

    题目 母牛从3 7岁初每年会生产1头小母牛 10岁后死亡 10岁任然存活 假设初始有一头刚出生的母牛 请问第n年有多少头母牛 年从第一年开始计数 注 第三年初会出生 第一头母牛 故第三年有两头母牛 第五年初 第三年出生的母牛会生产 故第五年
  • C语言之argument和parameter的区别

    The C Programming Language K R Page25 We will generally use parameter for a variable named in the parenthesized list in
  • STM32F4——ADC学习笔记

    OVR溢出错误 最近调试一个板子 使用ADC1采集多个通道 然后DMA传输到对应数组里 模仿STM32F1的写法后 一直出现OVR错误 溢出 网上看了各位大神的分析 里面有个比较关键的说DMA溢出 需要判断溢出的时候 重新配置DMA和再次启
  • ST-GCN论文分析

    Introduction 传统的骨架建模方法通常依赖手工制作的零件或遍历规则 因此表达能力有限 难以推广 新的动态骨架模型 通过自动从数据中学习时空模式 超越了以往方法的局限性 该公式不仅有更强的表达能力 而且有更强的泛化能力 早期使用骨架

随机推荐

  • IDEA Java1.8通过sqljdbc4连接sqlserver插入语句

    1 下载sqljdbc4 https mvnrepository com artifact com microsoft sqlserver jdbc sqljdbc4 4 0 下载后在IDEA放入仓库内 可以放在resources下 右键
  • 【Java基础】day14

    day14 一 什么是 RESTful 架构 REST 全称是 Representational State Transfer 中文意思是表征性状态转移 它首次出现在 2000 年 Roy Fielding 的博士论文中 Roy Field
  • 数据结构:时间复杂度汇总

    顺序表 插入操作 平均移动n 2个元素 则时间复杂度为O n 表尾插入 时间复杂度为O 1 删除操作 顺序表中删除任意一个元素 平均需要有 n 1 2个元素移动 时间复杂度为O n 查找操作 平均比较次数 n 1 2 时间复杂度为O n 数
  • Beyond Compare4到期

    到期后 删除注册表下的 计算机 HKEY CURRENT USER SOFTWARE Scooter Software Beyond Compare 4下的CacheID文件 试用期重新计算 打开注册表 win r 输入regedit
  • rollback-only异常令我对事务有了新的认识

    背景 环境 相关环境配置 SpringBoot PostGreSQL Spring Data JPA 问题 两个使用 Transaction 注解的 ServiceA 和 ServiceB 在 A 中引入了 B 的方法用于更新数据 当 A
  • 虚拟机配置NAT网络

    如果你的网络ip资源紧缺 但是你又希望你的虚拟机能够联网 这时候NAT模式是最好的选择 NAT模式借助虚拟NAT设备和虚拟DHCP服务器 使得虚拟机可以联网 其网络结构如下图所示 这个地方一定要将 主机网卡和虚拟网卡VMnet8地址设置成不
  • Linux中下载Redis

    1 在Redis版本库 https download redis io releases 可根据自己的需求选择下载对应的版本 然后直接下载 2 上传到linux里面 3 解压安装包 4 进入文件 打开文件 查看文件 5 进行编译 6 安装完
  • Springboot2.7.5版本升级2.7.8Redis启动报错

    项目从Springboot2 7 5升级到Springboot2 7 8的时候 启动时redis报错 报错如下 org springframework beans factory UnsatisfiedDependencyException
  • 网络拓扑配置案例练习(VRRP,浮动路由,DHCP,三层交换机配置)

    网络拓扑配置案例 网络拓扑配置案例练习 网络拓扑 需求描述 具体操作命令 交换机创建vlan 配置access trunk口 划分vlan vrrp配置 路由配置 验证vrrp和浮动路由 DHCP配置 总结 网络拓扑配置案例练习 在这篇文章
  • 线性空间和线性变化

    目录 考点一 线性空间的基与维数 1 线性空间 2 基底 3 子空间 线性子空间 编辑4 生成子空间 1 v1 n v2 2 v1 v2 5 求和子空间的方法 6 维数定理 7 例题 1 例1 1 考点二 证明线性变换 1 变换 2 线性变
  • SpringBoot 配置404页面

    SpringBoot 配置404页面 项目环境 服务器 centos 前端 Vue 后端 SpringBoot 出现的问题 访问一个不存在的页面时 会出现tomcat自带的404界面 这个界面对于用户不太友好 解决方案 1 自己写好404页
  • 有效解决C# Random生成随机数重复的问题

    在Random生成随机数的时候 如果短时间内连续生成随机数 就会导致生成的随机数相同 下面我们介绍如何解决在 短时间内生成随机数的时候 如何避免随机数不一样的问题 实例下载链接 http download csdn net download
  • FPGA——浅谈跨时钟域

    本篇文章仅用于个人学习 如有雷同 我抄他的 跨时钟域是每个FPGA初学者都会遇到的问题 跨时钟域分情况有以下几种 单bit跨时钟域 慢时钟域到快时钟域 快时钟域到慢时钟域 多bit跨时钟域 单bit跨时钟域 慢时钟域到快时钟域 首先谈谈单b
  • 华为OD机试真题 Java 实现【快速开租建站】【2023Q1 200分】,附详细解题思路

    一 题目描述 当前IT部门支撑了子公司颗粒化业务 该部门需要实现为子公司快速开租建站的能力 建站是指在一个全新的环境部署一套IT服务 每个站点开站会由一系列部署任务项构成 每个任务项部署完成时间都是固定和相等的 设为1 部署任务项之间可能存
  • Java正则表达式工具类

    import org apache commons lang3 StringUtils import org slf4j Logger import org slf4j LoggerFactory import java lang refl
  • Altium designer20(AD20)安装教程

    一 教程是基于本人在安装过程中的截图 步骤都非常详细 PDF教程文档 AD 20安装 提取码 u8mm AD20下载链接 AD20安装包 提取码 v7t6
  • KDD Cup竞赛介绍

    转自 http huzhyi21 blog 163 com blog static 1007396200981534952541 KDD Cup简介 KDD Cup is the annual Data Mining and Knowled
  • Win10系统VS2019+Cmake+gflags2.2.2环境配置

    1 gflags 1 1 简要介绍 gflags是google开源的一套命令行参数解析工具 使用C 开发 具备Python接口 可以替代getopt gflags使用起来比getopt方便 但是不支持参数的简写 例如getopt支持 lis
  • LLM-项目详解-KnowLM:信息抽取大模型

    GitHub zjunlp KnowLM Knowledgable Large Language Models Framework 随着深度学习技术的快速发展 大型语言模型如ChatGPT在自然语言处理领域已经取得了显著的成就 然而 这些大
  • c++的构造函数初始化列表

    C 类构造函数初始化列表 构造函数初始化列表以一个冒号开始 接着是以逗号分隔的数据成员列表 每个数据成员后面跟一个放在括号中的初始化式 例如 class CExample public int a float b 构造函数初始化列表 CEx