C 11 類別內初始化:解決過去的限制
在C 11 之前,類別內初始化僅限於積分的靜態const 成員或枚舉類型。此限制源自於需要避免複雜的連結器規則,確保每個物件都有唯一的定義。
但是,C 11 透過允許非靜態和非常量成員的類別內初始化引入了重大變更(§ 12.6.2/8)。這種放鬆是可能的,因為編譯器的改進,編譯器現在承擔了整理任何潛在的多個定義的責任,允許更複雜的類別聲明。
對於非靜態資料成員,大括號或等於 -初始化器可用於在物件建構期間進行初始化。除非明確指定,否則不會初始化變體成員,而在未提供初始化程序時執行預設初始化。
現在,當使用constexpr 說明符宣告非常量靜態成員時,也可以進行類別內初始化(第9.4.2 節).
這些變更消除了對類外成員初始值設定項的需要,從而提高了程式碼的簡單性和效率。但是,它們也引入了新規則來處理不同類別建構函式中潛在的重複初始化程序。例如,如果一個成員變數有一個類別內初始化器,並且也在建構函式內初始化,那麼在使用該建構函式時,類別內初始化器將被忽略。
總而言之,雖然底層實作複雜性已經發生了變化從連結器到編譯器,C 11的類別內初始化大大增強了類別定義和成員初始化能力,提高了程式碼可讀性和靈活性。
以上是C 11 如何增強類別內初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!