C 11 的類內初始化:放寬對非靜態和非常量成員的限制
C 11 之前,類內初始化僅限於static const 整數或枚舉型別成員。此限制背後的原因是需要跨多個翻譯單元維護物件的唯一定義,同時避免複雜的連結器規則。
但是,C 11 放寬了這些限制,允許非靜態成員的類別內初始化(§ 12.6.2/8)。這包括帶有大括號或等於初始化程序的非靜態資料成員和非抽象類別的非虛擬基底類別。
那麼,是什麼改變了這一切?雖然沒有對連結器進行重大修改,但編譯器在處理額外職責方面變得更加複雜。
與先前版本的 C 對多個定義強制執行嚴格的規則不同,C 11 的編譯器現在可以處理多個定義一堂課。編譯器承擔此任務,而不是由連結器解決定義衝突。
這種責任變化為程式設計師帶來了更多複雜性,他們現在必須考慮單一成員的多個成員初始化之間的潛在衝突。例如,一個類別同時具有成員初始值設定項目和對同一成員進行特定初始化的建構函數,需要仔細考慮以確定將使用哪個初始化。
儘管複雜性增加,但類內初始化的好處勝過挑戰。它允許更簡潔和更具表現力的程式碼,減少樣板程式碼並使程式碼更易於閱讀和理解。
以上是C 11 如何允許非靜態和非常量成員的類別內初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!