摘自《C++ Primer Plus》第6版12.7.1c++
class Quene { private: struct Node { int item; struct Node * next; }; enum { Q_SIZE = 10}; Node * front; Node * rear; int items; const int qsize; public: };
以一個冒號開始,接着是以逗號分隔的數據成員列表,每一個數據成員後面跟一個放在括號中的初始化式。函數
Queue::Queue(int qs) : qsize(qs) { front = rear = NULL; items = 0; }
Queue::Queue(int qs) : qsize(qs), front(NULL), rear(NULL), items(0) { }
注意:不能將初始化列表語法用於其餘類方法。spa
c++11提供了更直觀的方式進行初始化。c++11
Class MyClasscode
{it
int mem1 = 0;class
const int mem2 = 2;構造函數
};語法
這與在構造函數中使用初始化列表語法等價。引用
成員初始化列表和構造函數的函數體均可覺得咱們的類數據成員指定一些初值,可是二者在給成員指定初值的方式上是不一樣的。成員初始化列表使用初始化的方式來爲數據成員指定初值,而構造函數的函數體是經過賦值的方式來給數據成員指定初值。也就是說,成員初始化列表是在數據成員定義的同時賦初值,可是構造函的函數體是採用先定義後賦值的方式來作。這樣的區別就形成了,在有些場景下,是必需要使用成員初始化列表。
成員初始化列表是能夠初始化類的數據成員,那麼他是如何操做的呢?是經過一系列的函數調用麼,不是的。成員初始化列表是按照數據成員的聲明順序,將初始化操做安排在構造函數全部usercode的前面。成員初始化列表的初始化順序是按照類成員的聲明順序來的,因此在初始化的時候,儘可能不要用次序較後的成員來初始化次序較前的成員,這樣就會出問題,這也是成員初始化列表的一個弊端。