1.实例化的过程
首先,应该明确类需要定义,但类不是真实存在的对象,类的定义过程是对类的一个“声明”,并不会为其分配内存(包括static成员,也因此static成员必须类内声明,类外定义(初始化))。
必须通过构造函数才能将类实例化,这样类的数据成员才会被分配内存。
由于static成员属于类不属于各个对象,所以其不能通构造函数初始化,必须通过类外初始化,才能分配内存。至此所有数据成员都完成初始化。
2.类内初始值的用途
C++ 11 之后才有了使用类内初始值,并通过合成的默认构造函数进行成员初始化的新特性,可以说类内初始值是为类得默认初始化服务的。
编译器合成的默认构造函数会利用类内初始值初始化,但是前提是类含有显式的默认构造函数,或者不含其它任何构造函数,其他构造函数不支持类内初始值初始化。如果类内没有类内初始值,一般是无法通过默认初始化,即使有的编译器支持这样的操作,得到的对象也会含有未定义的数据成员。为了使构造函数将所有非静态成员初始化,当使用默认构造函数,类成员必须都有类内初始值;当使用其他构造函数时要将所有成员进行初始化,不然即使该成员有类内初始值,其值也是未定义的。