必须使用【初始化列表】初始化数据成员的情况

本文详细阐述了C++中为何必须在构造函数的初始化列表中初始化数据成员,包括对象、const成员和引用。初始化列表在构造函数执行前进行,确保对象正确初始化,避免编译错误。此外,初始化顺序遵循成员在类中声明的顺序,而非初始化列表的顺序,以优化效率并保持一致性。同时,文章强调了静态和常量成员的特殊初始化规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类对象的构造顺序是这样的:
1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员;
2.进入构造函数后在构造函数中执行一般赋值与计算。

使用初始化列表有两个原因:
原因1.必须这样做:

《C++ Primer》中提到在以下三种情况下需要使用初始化成员列表:
   情况一、需要初始化的数据成员是对象的情况(这里包含了继承情况下,通过显示调用父类的构造函数对父类数据成员进行初始化); 
   情况二、需要初始化const修饰的类成员;
   情况三、需要初始化引用成员数据;

 ■情况一的说明:数据成员是对象,并且这个对象只有含参数的构造函数,没有无参数的构造函数;

      如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表,那么他将无法完成第一步,就会报错。

例如:

#include "iostream"
using namespace std;

class Test
{
 public:
    Test (int, int, int){
    cout <<"Test" << endl;
 };
 private:
    int x;
    int y;
    int z;
};

class Mytest
{
 public:
    mytest():test(1,2,3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值