為什麼類的靜態成員要在類外初始化

2021-08-25 11:34:21 字數 361 閱讀 2350

在c++類的靜態成員為什麼要在類外初始化

首先c++的靜態成員是需要初始化的(實際上需要分配乙個記憶體,不一定需要賦值),初始化是賦乙個初始值,而定義是分配記憶體。靜態成員變數在類中僅僅是宣告,沒有定義,所以要在類的外面定義。

#include 

class

a ;

int a::a = 3; //定義了靜態成員變數,同時初始化。也可以寫"int a:a;",即不給初值,同樣可以通過編譯

int main()

靜態成員是單獨儲存的,並不是物件的組成部分。如果在類的內部進行定義,在建立多個物件時會多次宣告和定義該變數的儲存位置。在名字空間和作用於相同的情況下會導致重名的問題。

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

為什麼static資料成員一定要在類外初始化這是因為被static宣告的類靜態資料成員,其實體遠在main 函式開始之前就已經在全域性資料段中誕生了 見 inside the c object model page247 其生命期和類物件是非同步的,而且靜態語意說明即使沒有類實體的存在,其靜態資料成...

關於為什麼類的靜態成員變數不能立即初始化

我們都知道 1是錯誤的,今天我去追究其原因。當然有些地方屬於個人理解,有所紕漏,請不吝惜指正。test.h 1 當我們寫下面的 時,而沒有在cpp檔案裡給出定義,就會出現無法解析的外部符號錯誤。這是因為 static int a 是對變數a的宣告。我們都知道,類例項化時,編譯器分配記憶體給成員變數,...

有關類的靜態成員初始化

有四個檔案 class.h,class.cpp,fun.h,fun.cpp 1.第一種情況 class.h include class c class.cpp include class.h int main class.h 5 error iso c forbids in class initia...