• 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面
• 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 • 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化, 而是直接调用拷贝构造函数初始化。 下来看看初始化列表的例子: # define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<windows.h> using namespace std; class Time { public: Time() { cout << "Time()" << endl; _hour = 0; _minute = 0; _second = 0; } Time(const Time& t) { cout << "Time (const Time& t)" << endl; _hour = t._hour; _minute = t._minute; _second = t._second; } private: int _hour; int _minute; int _second; }; class Date { public: //EXP1 Date(int year, int month, int day,Time& t) { cout << "Date()- 非初始化列表 " << endl; _year = year; _month = month; _day = day; _t = t; } //EXP2 Date(int year, int month, int day, Time& t) : _year(year) , _month(month) , _day(day) , _t(t) { cout << "Date ()- 初始化列表 " << endl; } private: int _year; // 年 int _month; // 月 int _day; // 日 Time _t; // 时间 }; void Test() { Time t1; Date d1(2015, 4, 29, t1); } int main() { Test(); system("pause"); return 0; } 现在上面Date类有2个构造函数分别是EXP1和EXP2分别让他们运行可以发现都可以让程序跑过去, 初始化列表初始化和普通初始化具有一定的优势的~(这里一定先注释掉另外一个)。 初始化列表和非初始化列表效率是不同的,一般是初始化列表高一点,具体为什么初始化列表的效率高呢? 首先如果你是非初始化列表的步骤是什么? 如果你是一个自定义类型,在参数的时候调用一次构造函数,然后在下面赋值的时候调用 拷贝构造函数,这样就是构造+拷贝构造,而初始化列表是直接把参数附进来也就是一次性的构造就结束了.