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中文網其他相關文章!