class A{
private:
int x = 10;//定义变量时直接初始化,不建议这样做;
};
int main(){
A a;
return 0;
}
即上述关于类的定义正确与否?
一般而言,类中的数据成员在定义类的时候是不能初始化的。
这是一个可以值得探讨的话题,每个人的解释都不一样,大部分人都认为这是编译语法的规定,那么有没有考虑为什么会有这个规定呢?
个人认为可能的原因有:
(1)类只是一个抽象类型,并不是实体的东西,利用这个抽象类型会实例化成不同的个体,每个个体的特征(数据成员)都不一样,如果在类定义中将特征初始化了,岂不是破坏了抽象性,做了一个面向都一样的模子?
(2)类的定义实际相当与类型声明,并没有分配存储空间,初始化的数据哪里放? 类实例化以后才会有实体存储地址及空间。

所以:
1、一般的数据成员可以在构造函数中初始化。(构造初始化列表初始化和构造函数体内赋值初始化)
2、const数据成员必须在构造函数的初始化列表中初始化(道理很简单,const成员第一次数据初始化就是发生在类构造数据初始化时,一旦过了此时就会出现问题)。
3、static要在类的定义外面初始化。因为要单独给静态变量申请空间。
4、数组成员是不能在初始化列表里初始化的,不能给数组指定明显的初始化。
5、初始化列表初始化变量是和构造对象时同时发生的,而构造函数初始化变量是变量先有一个内存,该内存已经有值了,要先擦去该值,然后重新赋值,所以说,常变量只能通过初始化列表进行初始化。