首頁 >後端開發 >C++ >為什麼不能直接在 C 類別中初始化靜態成員和陣列?

為什麼不能直接在 C 類別中初始化靜態成員和陣列?

Linda Hamilton
Linda Hamilton原創
2024-12-08 06:08:11733瀏覽

Why Can't I Initialize Static Members and Arrays Directly in a C   Class?

為什麼我無法初始化類別中的非常量靜態成員或靜態陣列?

在C 語言中,靜態資料類別中的成員不能直接在類別定義中初始化,某些特定的成員除外

限制非常量靜態成員初始化的原因

靜態資料成員分配在程式的記憶體段中,並在程式的所有實例之間共用班級。 C 標準禁止它們的類別內初始化,以防止在多個翻譯單元中對相同變數進行多個定義。

限制靜態陣列初始化的原因

同樣,類別中的靜態陣列無法在類別中初始化,因為陣列佔用連續的記憶體區塊。允許類別內初始化將導致在每個翻譯單元中建立相同陣列的多個副本,從而導致意外行為。

Const Integral 和 Enum 類型的異常

靜態常數整型和枚舉類型是這些規則的例外。這些類型可以在類別中初始化,因為它們被視為編譯時常數,並且它們的值在編譯時已知。

數組初始化的解決方法

要初始化類別中的靜態數組,可以使用「枚舉技巧」:


enum { arrsize = 2 };
static const int c[arrsize] = { 1, 2 };

此方法宣告一個枚舉常數arrsize 來決定陣列大小,然後用來初始化靜態陣列const array c.

C 中的演化11 h3>

C 11 稍微放寬了這些限制。現在,某些類型的靜態資料成員(稱為「文字類型」)可以使用大括號或等於初始化程序在類別中進行初始化。此外,C 11 允許使用常數表達式在類別中初始化非靜態資料成員。

以上是為什麼不能直接在 C 類別中初始化靜態成員和陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn