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

C++--类的构造函数与初始化列表差异

一,引言

在类中成员函数的构造函数担任其将对象初始化的作用,而初始化列表也有着相似的作用。大部分人建议都是初始化列表进行初始化,本文主要进行讲解二者的区别。

首先看一下构造函数的初始化方式:
 

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;class date
{
public:date(int year = 1900, int month = 1, int day = 1){// _year = year;_month = month;_day = day;}
private:int _day;int _month;int _year;
};
int main()
{date s1;date s2;return 0;
}

当定义对象时,自动调用构造函数,对对象进行初始化。

下面看一下初始化列表:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;class date
{
public:date(int year = 1900, int month = 1, int day = 1):_year(),_month(),_day(){// //_year = year;//_month = month;//_day = day;}
private:int _day;int _month;int _year;
};
int main()
{date s1;date s2;return 0;
}

两种都是对对象进行初始化,实际上通过看编译器的运行过程,发现两种并没有关系,

编译器会首先走初始化列表,之后走构造函数的主体内容。也就是说不管写不写初始化列表都要走构造函数的主体内容。

下面看一个例子:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;class date
{
public:date(int year = 1900, int month = 1, int day = 1):_year(2014),_month(1),_day(1){// _year = year;_month = month;_day = day;}
private:int _day;int _month;int _year;
};
int main()
{date s1(2025,12,2);date s2;return 0;
}

 首先走初始化列表

 对象的三个成员的值为初始化列表的值。

之后走构造函数的主体

这就说明不管有没有初始化列表和构造函数的主体是否执行没有关系。

进而说明两者本质上是没有关系的。

相关文章:

  • 第十八章,入侵检测/防御系统(IDS/IPS)
  • JSON|cJSON 介绍以及具体项目编写
  • C++ 关联式容器:map,multimap,set,multiset
  • yarn npm pnpm
  • 如何快速分享服务器上的文件
  • 详解多协议通信控制器
  • 【字节拥抱开源】字节豆包团队开源首发 Seed-Coder 大模型
  • 04 mysql 修改端口和重置root密码
  • 软件测试——用例篇(3)
  • Web3 初学者学习路线图
  • 20250510-查看 Anaconda 配置的镜像源
  • navicat112_premium_cs_x64.exe PatchNavicat.exe
  • BeanPostProcessor和AOP
  • 前端SSE技术详解:从入门到实战的完整指南
  • Anaconda的简单使用
  • Java 中的数据类型误导点!!!
  • [Spring AOP 7] 动态通知调用
  • OSCP - Proving Grounds - EvilBox-One
  • 《深入理解Linux网络》笔记
  • 基于语言模型的依存关系分句 和 主题变换检测(基于词频和句段得分)的 意思
  • 冷冰川谈黑白
  • 体验中国传统文化、采购非遗文创,波兰游客走进上海市群艺馆
  • 肖峰读《从塞北到西域》︱拉铁摩尔的骆驼
  • 交涉之政、交涉之学与交涉文献——《近代中外交涉史料丛书》第二辑“总序”
  • 一周文化讲座|城市移民与数字时代的新工作
  • “爱鸟周”为何不能像FI和花展那样“市区联动”