当前位置:网站首页>解释初始化列表
解释初始化列表
2022-07-13 19:21:00 【幻荼】
目录
一:定义
我们先来看一个例子
Date(int year, int month, int day)//带参构造函数
:_year(year)
, _month(month)
, _day(day)
{}这是一个简单的初始化列表案例,以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括 号中的初始值或表达式。
二:特性
A.初始化列表能只能初始化一次,多次初始化会报错
Date(int year = 2022, int month = 4, int day = 19)//这是一般的构造函数
{
_year = year;
_month = month;
_day = day;
_day = day;//这里_day初始化了两次,编译器会报错,每个成员只能初始化一次
}B.编译器也允许构造函数赋初值和初始化列表初始化混用
Date(int year = 2022, int month = 4, int day = 19)//二者不冲突
: _year(year) //初始化
, _month(month)
{
_day = day;//注意这里和上面也不能两次重复出现,如_year(year)。这样就重复了,初始化只能出现一次
}C.const成员变量、引用成员变量、没有默认构造函数的自定义类型成员只能在初始化列表初始化。
Date(int year = 2022, int month = 4, int day = 19)
: _year(year)
, _month(month)
, _n(2) //const成员变量必须使用初始化列表进行初始化
{
_day = day;
//_n = 2; //const成员变量不能在函数体内初始化
}
Date(int year = 2022, int month = 4, int day = 19)
: _year(year)
, _month(month)
,_ref(year)//引用成员变量要在初始化列表初始化
{
_day = day;
//_ref = year; //引用成员变量不能在函数体内初始化
}
Date(int year = 2022, int month = 4, int day = 19)
: _year(year)
, _month(month)
, _a(20)//没有默认构造函数的自定义类型成员变量必须在初始化列表进行初始化
{
_day = day;
}
const成员变量、引用成员变量、没有默认构造函数的自定义类型成员变量必须在初始化列表内初始化的原因:
1.初始化列表是对象的成员变量定义的地方。
2.对象的内置类型成员变量在初始化列表定义时没有要求必须初始化,因此既可以在初始化列表进行初始化,也可以在构造函数体内初始化。
3.const成员变量、引用成员变量、没有默认构造函数的自定义类型成员变量不能先定义再初始化,它们在初始化列表内定义,并且必须在定义时就初始化,因此必须在初始化列表内初始化。
同时构造函数的执行可以分成两个阶段,初始化阶段和计算阶段,初始化阶段先于计算阶段。
二:初始化阶段:
所有类类型(class type)的成员都会在初始化阶段初始化,即使该成员没有出现在构造函数的初始化列表中。
三:计算阶段
一般用于执行构造函数体内的赋值操作。
四:成员变量的初始化顺序
class Date
{
public:
Date(int year, int month, int day)//初始化是根据定义的先后顺序,如year第一个定义,就第一个初始化
:_month(month)//第二个初始化
, _year(year) //第一个初始化
, _day(day) //第三个初始化
{}
private:
int _year; //第一个定义
int _month;//第二个定义
int _day; //第三个定义
};
边栏推荐
猜你喜欢

Preorder and inorder traversal sequences determine a binary tree (restore binary tree)

内存映射原理及详解(非常实用)

Audio and video learning (VII) -- aac audio code stream

音视频学习(七)——AAC音频码流
![[Go]二、RESTful API介绍和API流程和代码结构](/img/fd/8ae3d6a4c0d0c973ce81672c1c529c.png)
[Go]二、RESTful API介绍和API流程和代码结构

ODOO form视图详解(一)

有名管道原理及详解(非常实用)

机器学习——支持向量机(SVM)

LeetCode 1584. 连接所有点的最小费用
![[go] Ⅱ. Introduction à l'API reposante et au processus et à la structure du Code de l'API](/img/fd/8ae3d6a4c0d0c973ce81672c1c529c.png)
[go] Ⅱ. Introduction à l'API reposante et au processus et à la structure du Code de l'API
随机推荐
第三讲:最短距离
Lesson 3: stock trading III
用 AnimatedBuilder 分离组件和动画,实现动效复用
为什么越来越多的人要考PMP项目管理认证?
匿名管道原理及详解(非常实用)
odoo manifest.py文件详解
Odoo 的安全性
先序和中序遍历序列确定一颗二叉树(还原二叉树)
天田AMADA数控折弯机触摸屏维修RGM21003主机电路板维修
人工智能与 RPA 技术应用(一)-RPA弘玑产品介绍、设计器界面功能讲解
Judge whether two binary trees are isomorphic, and three implementation methods (recursion, queue, stack)
Memory mapping principle and detailed explanation (very practical)
odoo 中lambda函数的使用
Shutter renderflex overflowed by pixels on the bottom keyboard pop-up warning exception
np.delete详解 返回的数据为删除指定维度后的数据
php获取目录下的全部子文件名称(含案例、截图、代码)
babylon. JS height map
[go] Ⅱ. Introduction à l'API reposante et au processus et à la structure du Code de l'API
通过网上的客户经理办理炒股开户,安全吗?
Flutter RenderFlex overflowed by pixels on the bottom键盘弹出警告异常