C C 成員變數的初始化順序

2021-08-27 13:48:43 字數 1316 閱讀 7830

變數的初始化順序:

① 基類的靜態變數或全域性變數

②派生類的靜態變數或全域性變數

③基類的成員變數

④派生類的成員變數

注意:①成員變數在使用初始化列表初始化時,與建構函式中初始化成員列表的順序無關,只與定義成員變數的順序有關。

②如果不使用初始化列表初始化,在建構函式內初始化時,此時與成員變數在建構函式中的位置有關。

③類中const成員常量必須在建構函式初始化列表中初始化。

④類中static成員變數,必須在類外初始化。

靜態成員是類所有的物件的共享的成員,而不是某個物件的成員。它在物件中不占用儲存空間,這個屬性為整個類所共有,不屬於任何乙個具體物件。所以靜態成員不能在類的內部初始化。)

看乙個例子:

#include using namespace std;

class a

//~a();

void print()

private:

int n1;

int n2;

};

我**結果為:n1:2  ,  n2:0 

然而執行結果為:

這是因為第①條提到的,成員變數在使用初始化列表初始化時,與建構函式中初始化成員列表的順序無關只與定義成員變數的順序有關。因為成員變數的初始化次序是根據變數在記憶體中次序有關,而記憶體中的排列順序早在編譯期就根據變數的定義次序決定了。

又如:

#include using namespace std;

class a

void print()

private:

int n1;

int n2;

};

執行結果為:

這個結果說明,如果不使用初始化列表初始化,在建構函式內初始化時,此時與成員變數在建構函式中的位置有關

C 成員變數的初始化順序

知識點 在c 中,成員變數的初始化順序只與它們在類中宣告的順序有關,而與初始化列表中的順序無關。不知道大家知不知道這個,反正我是不知道 或者忘了 我是在 劍指offer 上看到的,後來在 effective c 中條款4中再次看到,特地在這記錄一下,防止忘記。下面舉個具體的例子,摘自 劍指offer...

c 成員變數的初始化順序

class a void print 輸出 n1 隨機 n2 0 如果把建構函式寫成不是用初始化列表,而是在建構函式體內初始化的形式 a 那麼輸出結果就是n1是2,n2是0 分析 1 成員變數在使用初始化列表初始化時,與建構函式中初始化成員列表的順序無關,只與定義成員變數的順序有關。因為成員變數的初...

C 成員變數的初始化順序

順序為 基類的靜態變數或全域性變數 派生類的靜態變數或全域性變數 基類的成員變數 派生類的成員變數 注意 成員變數在使用初始化列表初始化時,與建構函式中初始化成員列表的順序無關,只與定義成員變數的順序有關。如果不使用初始化列表初始化,在建構函式內初始化時,此時與成員變數在建構函式中的位置有關。類中c...