C 標準限制靜態資料的初始化類別定義中的成員僅限靜態常數整數或枚舉型別。
This限制是由於編譯器處理靜態資料成員的方式造成的。每個靜態資料成員必須有一個唯一的定義,如果在類別定義中初始化,則當該類別包含在多個翻譯單元中時,它將建立多個定義。
靜態數組,即使是常數數組,也無法在類別定義中初始化,因為它們的大小無法在編譯時確定。編譯器要求先知道數組的大小,然後才能為數組分配記憶體。
要在類別定義中初始化靜態數組,可以使用以下解決方法可以使用「枚舉技巧」:
標準的限制關於初始化非常量靜態成員,源於防止定義不明確以及確保跨翻譯單元的成員定義唯一的需要。
對於靜態數組,C 語言設計優先考慮編譯時效率,需要數組大小在編譯時已知以最佳化記憶體分配。然而,C 11 引入了常數表達式的概念,允許使用編譯時確定的值來初始化 const 資料成員,這可能會在未來的 C 版本中提供更多靈活性。
以上是為什麼不能在 C 類別定義中初始化非常量靜態成員和陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!