C++ 类的数据成员初始化,重点解析类内初始值、static和const成员的初始化问题。

         1.实例化的过程

首先,应该明确类需要定义,但类不是真实存在的对象,类的定义过程是对类的一个“声明”,并不会为其分配内存(包括static成员,也因此static成员必须类内声明,类外定义(初始化))。

必须通过构造函数才能将类实例化,这样类的数据成员才会被分配内存。

由于static成员属于类不属于各个对象,所以其不能通构造函数初始化,必须通过类外初始化,才能分配内存。至此所有数据成员都完成初始化。

2.类内初始值的用途

C++ 11 之后才有了使用类内初始值,并通过合成的默认构造函数进行成员初始化的新特性,可以说类内初始值是为类得默认初始化服务的。

编译器合成的默认构造函数会利用类内初始值初始化,但是前提是类含有显式的默认构造函数,或者不含其它任何构造函数,其他构造函数不支持类内初始值初始化。如果类内没有类内初始值,一般是无法通过默认初始化,即使有的编译器支持这样的操作,得到的对象也会含有未定义的数据成员。为了使构造函数将所有非静态成员初始化,当使用默认构造函数,类成员必须都有类内初始值;当使用其他构造函数时要将所有成员进行初始化,不然即使该成员有类内初始值,其值也是未定义的。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值