首頁 > 後端開發 > C++ > 為什麼不能在 C 中的類別定義內初始化非常量靜態成員或靜態陣列?

為什麼不能在 C 中的類別定義內初始化非常量靜態成員或靜態陣列?

Linda Hamilton
發布: 2024-12-06 05:00:11
原創
308 人瀏覽過

Why Can't Non-Const Static Members or Static Arrays Be Initialized Inside a Class Definition in C  ?

為什麼類別中不能初始化非常量靜態成員或靜態陣列?

類別中,靜態資料成員可以僅當它們是常數且是整數時才被初始化。此限制源自於 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板