1. 程式人生 > >為什麼static資料成員一定要在類外初始化

為什麼static資料成員一定要在類外初始化

https://www.cnblogs.com/zhaobinyouth/p/6340008.html

為什麼static資料成員一定要在類外初始化

  這是因為被static宣告的類靜態資料成員,其實體遠在main()函式開始之前就已經在全域性資料段中誕生了(見《Inside   The   C++   Object   Model》page247)!其生命期和類物件是非同步的,(而且靜態語意說明即使沒有類實體的存在,其靜態資料成員的實體也是存的)這個時候物件的生命期還沒有開始,如果你要到類中去初始化類靜態資料成員,讓靜態資料成員的初始化依賴於類的實體,,那怎麼滿足前述靜態語意呢?難道類永遠不被例項化,我們就永遠不能訪問到被初始化的靜態資料成員嗎 

靜態成員變數隸屬於類,不是某個物件,所以靜態成員變數不可能佔用某一個物件的儲存空間,所以靜態成員需要再類外部定義,以便靜態成員變數在全域性資料區分配其儲存空間。

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#include <stdio.h>

class Test

{

private:

    static int cCount;

public:

    Test()

    {

        cCount++;

    }

    ~Test()

    {

        --cCount;

    }

    int getCount()

    

{

        return cCount;

    }

};

int Test::cCount = 0;

 

  

 

 

 

static const int可以在類裡面初始化,因為它既然是const,那程式就不會再去試圖初始化