成員初始化次序

2021-08-31 06:19:47 字數 674 閱讀 1321

#include

using namespace std;

class base

base( int i):m_i(m_j),m_j(i){}

int get_i()

int get_j()

};int main()

結果:偽隨機數,98

建構函式初始化列表僅指定用於初始化成員的值,並不指定這些初始化執行的順序,成員初始化的次序就是定義成員的次序,第乙個成員首先被初始化,然後是第二個。

上面的例子,private:

int m_i;

int m_j;

成員定義的順序是 m_i,m_j,那麼初始化也是先初始化m_i,然後是m_j.

base obj(98);base( int i):m_i(m_j),m_j(i){} 先初始化m_i=98,然後再初始化m_i(m_j),由於m_j是個隨機值,則m_i的值會更改為m_j,然後再m_j(i)使得m_j=98

在看下面的例子:

private:

int m_j;

int m_i;

輸出結果:98,98

這就是定義成員列表的次序和初始化的次序不一樣的結果。

c 建構函式初始化列表中成員初始化的次序性

上 include using namespace std class a void print val private inti intj int main int argc char ar 結果 究其因 類中成員變數的宣告次序為先i後j,在初始化列表中初始化時,先j後i。但是程式執行時,初始化列...

c 中類的資料成員初始化次序

今天學了乙個知識點,感覺還挺重要的,就是當乙個類中的某個資料成員同時擁有就地初始化 建構函式初始化列表和建構函式函式體裡的賦值,那麼它會先執行哪個?最後生效的又是哪個呢?根據老師的講解,資料成員的初始化次序依次為 就地初始化 建構函式的初始化列表 建構函式裡的賦值 嚴格意義上不能成為初始化 而當三種...

成員初始化列表

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