首頁 > 後端開發 > C++ > 主體

C 11 如何允許非靜態和非常量成員的類別內初始化?

Patricia Arquette
發布: 2024-11-20 02:05:02
原創
764 人瀏覽過

How Does C  11 Allow In-Class Initialization of Non-Static and Non-Constant Members?

C 11 的類內初始化:放寬對非靜態和非常量成員的限制

C 11 之前,類內初始化僅限於static const 整數或枚舉型別成員。此限制背後的原因是需要跨多個翻譯單元維護物件的唯一定義,同時避免複雜的連結器規則。

但是,C 11 放寬了這些限制,允許非靜態成員的類別內初始化(§ 12.6.2/8)。這包括帶有大括號或等於初始化程序的非靜態資料成員和非抽象類別的非虛擬基底類別。

那麼,是什麼改變了這一切?雖然沒有對連結器進行重大修改,但編譯器在處理額外職責方面變得更加複雜。

與先前版本的 C 對多個定義強制執行嚴格的規則不同,C 11 的編譯器現在可以處理多個定義一堂課。編譯器承擔此任務,而不是由連結器解決定義衝突。

這種責任變化為程式設計師帶來了更多複雜性,他們現在必須考慮單一成員的多個成員初始化之間的潛在衝突。例如,一個類別同時具有成員初始值設定項目和對同一成員進行特定初始化的建構函數,需要仔細考慮以確定將使用哪個初始化。

儘管複雜性增加,但類內初始化的好處勝過挑戰。它允許更簡潔和更具表現力的程式碼,減少樣板程式碼並使程式碼更易於閱讀和理解。

以上是C 11 如何允許非靜態和非常量成員的類別內初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板