当一个类中有引用类型成员变量,和const成员变量时,他们是不能通过构造函数赋值初始化的。
只能通过构造函数初始值列表进行初始化:
class ClassX {
public:
int a;
int &c;
const int d;
private:
int b;
public:
ClassX(int a, int b)://注意要跟一个冒号再加列表
c(a), d(9) {
this -> a = a;
this -> b = b;
//this -> c = c;
//this -> d = d;
}
int getb() {
return this -> b;
}
};
int main()
{
ClassX classX(1, 2);
cout << classX.a << classX.getb() << classX.c << classX.d << endl;
return 0;
}
上面的c、d分别是引用类型和常量类型的成员变量,通过c(a)、d(9)进行了初始化。
初始化时会按照成员变量的声明顺序,而不是构造函数初始值列表中的顺序。如果你决定使用初始化列表,请按照它们声明的顺序罗列这些成员。这将有助于消除混淆。
=======================
如果定义变量时没有指定初值,则变量被“默认初始化”。
如果内置类型的变量未被显示初始化,他的值由定义的位置决定:定义于任何函数之外的变量将初始化为0,定义在函数体内部的值将不能被初始化,其值将是未定义的。
一些类要求每个对象都先时初始化。
建议初始化每一个内置类型的变量。