以前看到的C++98的文章:
C++为类中提供类成员的初始化列表。
类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
1.类里面的任何成员变量在定义时是不能初始化的。
2.一般的数据成员可以在构造函数中初始化。
3.const数据成员必须在构造函数的初始化列表中初始化。
4.static要在类的定义外面初始化。
5.数组成员是不能在初始化列表里初始化的。
6.不能给数组指定明显的初始化。
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。这个事情似乎说不过去啊?没有办法,我只好转而求助于静态数据成员或者使用枚举。
但是在C++11中,我们可以利用类内初始化:
可以看到基本类型不用多说,可以在类内初始化。在这里我们重点看const 与static,引用,以及数组。int j = 15; class Bclass { private: int f = 100; float g = 200.0; const float h = 30.0; const int a=10; // const int array[20]; // int thesecondarray[20] = { 0 }; int &b=j; int &k = f; static int c; static const int d=30; static const float e; public: Bclass() { // array[20] = { 0 }; 注释去掉有错误 //thesecondarray[20] = { 0 }; } void print() { cout << a << " " << b << " " << c << " " << d << " " << e << " " << f << " " << g << " " << h << " " << k << endl; //for (int i = 0; i < 20; ++i) //cout << array[i] << " "; //for (int i = 0; i < 20; ++i) //cout << thesecondarray[i] << " "; } }; int Bclass::c = 20; const float Bclass::e = 40.0;
const 的int 与float都能在类内初始化。但是static还是只有static const int 能在类内初始化,其他的static 还是能在类外初始化。
而引用则可以在类内初始化。而无论是const 数组还是非const 数组,都不能在类内显示初始化。