2012-03-28 108 views
5

可能重複:
Do static members of a class occupy memory if no object of that class is created?
Memory Allocation of Static Members in a Class類的靜態成員

「A類不視爲定義,直到它的類主體是完整的,一個類不能有數據成員是它自己的類型,一個類可以有數據成員,它們是指向它自己類型的指針/引用。「

  • C++引物(李普曼拉茹瓦)

有道理。

但是,爲什麼這是允許的呢?

class justAClass 
{ 
    public : 
    justAClass(); 

    private :   
    static justAClass justAMember; 
} 

對於指針是可以理解的。但是,這個事情將如何工作?我將如何決定這樣一個班的對象的大小?它不是一個遞歸的情況下(沒有基本條件)有一個自己的類型的成員,即使它是靜態的?

+0

靜態成員數據不會影響類的大小。 – 2012-03-28 07:10:57

回答

6

類的原因不能有自己類型的數據成員是編譯器必須知道類對象的大小。 例如,一個類是函數中的局部變量,編譯器只能處理棧,它只知道類的大小。

對於您的情況,靜態類成員不駐留在類對象中,因此不會影響類對象的大小。沒關係。

3

形式上,區別在於類中靜態成員的聲明不是定義。您必須在別處提供一個定義(只需一次),編譯器在遇到定義之前不需要知道大小。靜態成員不會影響類本身的大小。 (在許多方面,類中的靜態成員聲明非常類似於非成員聲明extern。)