c 的成員列表初始化解析

2021-10-08 11:26:02 字數 876 閱讀 8887

首先來看一段**

這是某個類的定義(簡單定義):

class

queue

;

接著初始化類建構函式:

queue::

queue

(int qs)

上述**無法正常執行,原因在於qszie這一點,他是常量,只能初始化而不能賦值,原因如下:

正常的呼叫建構函式的內部順序是:①呼叫建構函式②建立物件③首先給類的成員變數分配記憶體,自動初始化④執行建構函式內部的**。

因此,對於qsize來說因為是const型別,必須在建立物件時初始化,而不能在大括號內部在初始化。同理可參考引用的初始化。

所以,c++有特殊的語法來完成這種情況的初始化,叫做成員初始化列表

queue::

queue

(int qs,

int a)

:qsize

(qs)

,belong

(a)//qsize和belong是成員變數,qs和q是將要初始化的值

當然,這種形式只能用於建構函式當中!

在c++11中可以以更直觀的方式進行初始化,即在類的內部進行初始化,這等價於成員列表初始化

class

classy

//等價於

classy::

classy()

:men1(10

),men2(20

)

C 成員初始化列表

類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的順序依次呼叫所有基類的預設建構函式,然後是所有成員類物件的預設建構函式。2.進入建構函式後在建構函式中執行一般計算 計算階段由建...

C 成員初始化列表

c 初始化類的成員,不僅可以用constructor完成,也可以用初始化類成員列表來完成。有些情況只能用第一種,而且通常第一種效率高些。兩者區別 1,普通變數編譯器會預設替你初始化。它們既能初始化,也能被賦值,而常量const按照其意思只能被初始化,不能賦值。所有const member只能用成員初...

C 初始化成員列表

c 在類的建構函式中,可以兩種方式初始化成員資料 data member 1,在建構函式的實現中,初始類的成員資料。諸如 class point int getx int gety 2,還可以定義初始化成員列表 initializer list 來初始化成員資料 data member 改寫建構函式...