一、构造函数初始化列表
构造函数的执行分为两部分,首先执行初始化段,在执行{}内的普通计算段。推荐在构造函数初始化列表中进行初始化,这样执行效率比较高。
class Test { public: Test(int a,int b,int c) :x(a),y(b),z(c){}//在初始化列表中初始化,效率较高,若在计算段{ x=a; y=b; z=c; },调用赋值操作,效率较低 private: int x; int y; int z; }; int main() { Test(1,2,3); }
二、对象成员及其初始化
对象成员的初始化必须在初始化列表中初始化,如下:
class Object { public: Object(int num) : num_(num) { cout<<"Object "<<num_<<" ..."<<endl; } ~Object() { cout<<"~Object "<<num_<<" ..."<<endl; } private: int num_; }; class Test { public: Test(int a,int b) :x(a),obj(b){} private: Object obj; int x; }; int main() { Test(1,2); }在有对象成员的类中,先调用对象成员的构造函数初始化对象成员,在初始化类自身。
三、const成员、引用成员初始化
因为const成员、引用成员在声明时必须被初始化,所以类成员中的const成员和引用成员也必须在初始化列表中初始化。
class Test { public: Test(int a,int b) :x(a),ref(b) { cout<<"const x="<<x<<endl<<"refrence ref="<<ref<<endl; } private: const int x; int& ref; }; int main() { Test(1,2); }