当前位置: 首页 > news >正文

C++学习笔记24:构造函数初始化列表

目录

一、什么是初始化列表?

二、初始化列表和函数体内赋值有什么区别

三、哪些成员必须使用初始化列表

1. const 成员变量

2. 引用成员变量

3. 没有默认构造函数的自定义类型成员

四、初始化顺序

五、小结


一、什么是初始化列表?

在C++中,构造函数除了可以在函数体内给成员变量赋值,也可以使用初始化列表

普通写法:

class Date { public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; } private: int _year; int _month; int _day; };

初始化列表写法:

class Date { public: Date(int year, int month, int day) ; _year(year) , _month(month) , _day(day) { } private: int _year; int _month; int _day; };

初始化列表写在构造函数参数列表后面,以冒号 : 开始,多个成员之间用逗号分隔。


二、初始化列表和函数体内赋值有什么区别

函数体内写:

_year = year;

本是上是赋值

初始化列表写:

: _year(year)

本质上是初始化

简单理解:

初始化列表:成员函数创建时直接初始化 函数体内赋值:成员变量创建后再赋值

对于普通变量 int、char、double成员你,两种写法很多时候结果一样。

但有些成员必须使用初始化列表。


三、哪些成员必须使用初始化列表

主要有三类:

1. const 成员变量 2. 引用成员变量 3. 没有默认构造函数的自定义类型成员

1. const 成员变量

class A { public: A(int x) : _x(x) { } private: const int _x; };

const 成员变量创建后不能修改,所以必须在初始化列表中初始化。


2. 引用成员变量

class A { public: A(int x) : _ref(x) { } private: int& _ref; };

引用必须在定义时初始化,所以引用成员也必须使用初始化列表。


3. 没有默认构造函数的自定义类型成员

class B { public: B(int x) : _x(x) { } private: int _x; }; class A { public: A(int x) : _b(x) { } private: B _b; };

因为 B 没有无参构造函数,所以 A 中的 _b 必须在初始化列表中显式初始化。


四、初始化顺序

成员变量的初始化顺序不是看初始化列表中的书写顺序,而是看成员变量在类中的声明顺序

例如:

class A { public: A(int x) : _a1(x) , _a2(_a1) { } private: int _a2; int _a1; };

虽然初始化列表中先写 _a1,但成员变量声明时 _a2 在前,所以实际会先初始化 _a2。

因此建议:

初始化列表的书写顺序和成员变量的声明顺序保持一致。

这样代码更清晰,也不容易出错。


五、小结

本篇主要学习了构造函数初始化列表。

需要记住:

  1. 初始化列表写在构造函数参数列表后面;
  2. 初始化列表以 : 开始;
  3. 多个成员变量之间用逗号隔开;
  4. 函数体内是赋值,初始化列表才是初始化;
  5. const 成员变量必须使用初始化列表;
  6. 引用成员变量必须使用初始化列表;
  7. 没有默认构造函数的自定义类型成员必须使用初始化类表;
  8. 成员变量初始化顺序由声明顺序决定;
  9. 初始化列表书写顺序建议和成员声明顺序保持一致;
  10. 建议优先使用初始化列表写构造函数。

初始化列表是构造函数中的重要内容。理解它之后才能更好的处理 const 成员、引用成员和自定义类型成员的初始化问题。

http://www.zskr.cn/news/1351134.html

相关文章:

  • Linux】2026 年 13 款最强视频播放器(含安装命令 + 优缺点)
  • 荣县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • AI 时代的平台工程
  • 色达县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • C++学习笔记23:const 成员函数
  • 邻水县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 西昌市黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • Blender 3MF插件:实现CAD到3D打印的无缝转换完整指南
  • 3步搞定显卡风扇异常:用FanControl彻底解决NVIDIA风扇噪音和转速问题
  • 西区黄金回收白银回收铂金回收店铺哪家好 靠谱门店推荐 - 莘州文化
  • 为什么你的Windows快捷键突然失效?Hotkey Detective一键定位占用程序终极指南
  • AI驱动的业务PPT智能生成:DeepSeek × Skills × MCP × 知识库
  • 法律Agent:合规检查与文档生成
  • 测试工程师必学的接口自动化测试框架:从0到1搭建实战
  • 终极指南:Visual C++运行库合集AIO - 一站式解决Windows程序依赖问题
  • 国产多模态大模型 vs GPT-4V:全面对比与开发者选型指南
  • 软件测试的缺陷管理:这4个工具+5个流程,让你的缺陷管理更高效
  • 九龙县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 从能算到秒杀:单词拆分与「能否拼出来」的判定艺术
  • 九寨沟县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 沐川县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 平阴县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 终极指南:如何用ESP32-A2DP库快速构建蓝牙音频设备
  • 普格县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 平原县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 2026年腾讯云OpenClaw/Hermes Agent配置Token Plan集成流程详解
  • 渠县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 庆云县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 仁和区黄金回收白银回收铂金回收店铺哪家好 靠谱门店推荐 - 莘州文化
  • 基于taotoken多模型能力在ubuntu构建智能客服路由系统