首頁 > 後端開發 > C++ > 為什麼指定初始化清單被排除在 C 11 之外?

為什麼指定初始化清單被排除在 C 11 之外?

Barbara Streisand
發布: 2024-12-27 22:46:11
原創
281 人瀏覽過

Why Were Designated Initializer Lists Excluded from C  11?

C 11 中的指定初始值設定項清單排除

C 11 缺乏對指定初始值設定項清單的支持,這是C99 中存在的功能。這項遺漏讓一些開發人員感到困惑,他們想知道為什麼新標準中沒有包含如此方便的語法。

基本原理

C 標準委員會一直拒絕將指定的初始值設定項清單合併到語言中。它們的基本原理源自於幾個固有的挑戰:

求值順序不確定性:

在C99 中,指定初始化子表達式的求值順序是不確定的。這可能會導致意外的行為,特別是當初始化涉及交互函數或副作用時。

相容性違規:

如果C 要實現具有不確定評估的指定初始值設定項列表命令,它將破壞與現有C99 實現的兼容性,而現有C99實現通常提供一致的評估

可行性問題:

標準委員會多次對以符合嚴格初始化清單要求的方式實現指定初始化清單的可行性表示懷疑C (11.6.4[dcl.init.list]4).

C中的指示符限制20

雖然指定的初始化器清單仍然被排除在C 11 和C 17 之外,但C 20 標準引入了部分支援和限制,以確保確定性和相容性。這些限制包括:

  • 只能指定依照初始化順序宣告的資料成員。
  • 不支援陣列和巢狀初始化。
  • 全部或無資料成員必須透過以下方式初始化

結論

從C 11 排除指定初始化器清單是標準委員會出於對評估順序不確定性的擔憂而故意做出的決定,相容性問題和實施挑戰。雖然 C 20 最終添加了有限的支持,但 C 標準繼續專注於執行嚴格的初始化程序順序並避免可能損害程序正確性或可移植性的不可預測的行為。

以上是為什麼指定初始化清單被排除在 C 11 之外?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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