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

2021-08-28 23:52:46 字數 775 閱讀 3071

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

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

#include

classtest

~test()

intgetcount()

};

inttest::ccount = 0;

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

HashMap底層為什麼一定用陣列

hashmap原始碼資料結構 entry table new entry capacity 其中,entry就是乙個鍊錶節點。如果將陣列替換成linkedlist是否可行?如下 listtable new linkedlist 將陣列替換成linkedlist是可以的,但是hashmap選用陣列的原...

HashMap底層為什麼一定用陣列

hashmap原始碼資料結構 entry table new entry capacity 其中,entry就是乙個鍊錶節點。如果將陣列替換成linkedlist是否可行?如下 listtable new linkedlist 將陣列替換成linkedlist是可以的,但是hashmap選用陣列的原...

為什麼重寫就一定需要重寫HashCode方法

equals 和 hashcode方法是屬於object的,所以每個物件都有自己的equals 和 hashcode方法。在object中equals方法是用來判斷兩個物件是否是同乙個也就是他們的儲存位址是一樣的。但是往往我們有自己的需要定義equal,所以重寫equals方法很重要!下面來說說eq...