关于C++ 类数据成员初始化的一点总结【为什么类定义中不能初始化成员变量】

时间:2021-01-11 18:55:10

往往被初学者忽视的是,C++类中的数据初始化是有讲究的,

一般需要遵循以下几条约束:

  1.一般而言,类里面的任何成员变量在定义时是不能初始化的。

      【为什么???】

         这是一个可以值得探讨的话题,每个人的解释都不一样,大部分人都认为这是编译语法的规定,那么有没有考虑为什么会有这个规定呢?

        个人认为可能的原因有:

         (1)类只是一个抽象类型,并不是实体的东西,利用这个抽象类型会实例化成不同的个体,每个个体的特征(数据成员)都不一样,如果在类定义中将特征初始化了,岂不是破坏了抽象性,做了一个面向都一样的模子?

           (2)类的定义实际相当与类型声明,并没有分配存储空间,初始化的数据哪里放? 类实例化以后才会有实体存储地址及空间。

             (3)关于C++内部对象模型的考虑,后续有专门文章分析。
  2.一般的数据成员可以在构造函数中初始化。(构造初始化列表初始化和构造函数体内赋值初始化)
  3.const数据成员必须在构造函数的初始化列表中初始化(道理很简单,const成员第一次数据初始化就是发生在类构造数据初始化时,一旦过了此时就会出现问题)。
  4.static要在类的定义外面初始化。   
  5.数组成员是不能在初始化列表里初始化的,不能给数组指定明显的初始化。  
或许有人问,以上几条似乎有冲突喔!

一个类中能不能定义常量数组?如:

const int aa[100];

如果可以,怎么初始化aa?  

实际上不行的,这与3 5 矛盾。我们可以用static数据成员来解决此问题。