在C 中,存在禁止初始化非常量靜態成員或靜態的限制類別聲明中的陣列。為了澄清這一點,讓我們深入研究這個限制背後的機制及其後果。
C 語言標準明確規定只能靜態常數積分或枚舉型別在類別定義期間初始化。例如,在提供的程式碼片段中,靜態資料成員 a 是 const int 類型,可以初始化,而其他成員(如 b)則不能。
此限制源自於靜態成員之間共享的事實一個類別的所有實例。為了確保唯一性和一致性,標準要求所有靜態成員在類別聲明之外都有一個單一的、定義良好的定義。
上述原則的擴展,靜態數組也不允許進行類內初始化,即使是像 c 這樣的常數數組也是如此。與靜態成員類似,靜態陣列需要唯一的定義來保持類別的所有實例的一致性。由於初始化器是聲明的一部分,因此如果在類別中嘗試,它將導致多個定義。
要規避類別宣告中陣列的初始化限制,可以使用「枚舉技巧」。它涉及定義具有所需數組大小的枚舉,然後將其用作數組的索引。
C 標準施加的上述限制有幾個含義:
在該語言的後續修訂版(即 C 11)中,對初始化靜態資料成員已經在一定程度上得到了放鬆。現在可以在類別聲明中初始化「const 文字類型」的靜態資料成員。 「文字類型」是指像 int 和 char 這樣沒有使用者定義語意的基本型別。
但是,靜態陣列仍然受到在類別宣告中初始化的限制,強調需要在類別外部有唯一的定義.
以上是為什麼無法在 C 類別中初始化非常量靜態成員和陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!