為什麼類別中不能初始化非常量靜態成員或靜態陣列?
類別中,靜態資料成員可以僅當它們是常數且是整數時才被初始化。此限制源自於 C 標準要求每個物件都有唯一的定義。
非常量靜態成員初始化:
根據 C 標準 (C 03 9.4 .2),非常量類型的靜態資料成員不能在類別定義中初始化。下面的程式碼說明了這一點:
class A { static int b = 3; };
此程式碼違反了標準,並且會產生錯誤,因為靜態成員 b 是非常量並嘗試在類別中初始化它。
靜態數組初始化:
同樣,靜態數組不能在類別定義中初始化,即使它們是常數。這是因為靜態數組作為物件儲存在記憶體中。因此,它們無法在類別定義中初始化,因為這會違反唯一定義的要求。
class A { static const int c[2] = { 1, 2 }; };
此程式碼再次違反標準並會產生錯誤。
解決方法和原因:
在類別中初始化靜態數組的一種解決方法涉及使用「枚舉」技巧,」如下:
class A { static const int a = 3; enum { arrsize = 2 }; static const int c[arrsize] = { 1, 2 }; };
禁止靜態資料成員的類別內初始化的原因與包含類別聲明的頭檔通常包含在多個翻譯單元中這一事實有關。要求每個物件都有唯一的定義。 。實現,例如gcc 4.7。
以上是為什麼不能在 C 中的類別定義內初始化非常量靜態成員或靜態陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!