1.成员初始化的顺序:
按照他们在类中出现的顺序进行初始化的,而不是按照他们在初始化列表出现的顺序初始化的。
2.必须在初始化列表中初始化的成员:
•常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面
•引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
•没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。
3.为什么使用初始化列表:
使用初始化列表少了一次调用默认构造函数的过程
#include<iostream>
#include<stdlib.h>
using namespace std;
struct Test1
{
//Test1(){ cout << "construct test1" << endl; }
Test1(int i) :a(i){}
//Test1(const Test1&t1){ cout << "copy construct for test1" << endl; this->a = t1.a; }
Test1& operator = (const Test1 &t1){ cout << "assignment for test1" << endl; this->a = t1.a; return *this; }
int a;
};
struct Test2
{
Test1 test1;
//Test2(Test1&t1){test1 = t1;}
Test2(Test1 &t1) :test1(t1){}
};
void main()
{
Test1 t1(2);
Test2 t2(t1);
system("pause");
}
参考:http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html