在C 領域,靜態資料成員駐留在類別內,但超越了類別的邊界,需要在類別外部定義班級本身。正如IBM 的C 知識中心所確認的那樣,「類別的成員清單中的靜態資料成員的聲明不是定義…[它]必須在類別聲明之外、命名空間範圍內定義靜態成員。」為什麼要執行這條規則?哪些潛在的記憶體分配考慮因素需要這種做法?
這項任務背後的原則在於該語言的基本「單一定義規則」。這項規則規定程式中使用的所有靜態物件必須精確地具有一個定義,並且僅具有一個定義。類別定義通常位於頭檔中,經常會在多個翻譯單元(原始檔案)中合併。如果靜態物件的聲明放在標頭中,則每個包含的單元都會產生一個單獨的定義,直接違反了單一定義規則。
為了規避這一危險,標頭中的類別定義僅聲明靜態資料成員而不定義它們。這迫使程式設計師在其他地方提供明確的定義。雖然理論上該語言可以將多個定義合併為一個,就像使用內聯函數一樣,但靜態資料成員的情況並非如此。因此,我們只剩下語言對靜態資料成員的外部定義的要求。
以上是為什麼 C 靜態資料成員必須在類別外部定義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!