非 constexpr 函式庫函數的擴充處理是否符合要求?
GCC 將非 constexpr 標準函式庫函數視為 constexpr 的能力某些情況會引發有關一致性的問題。
矛盾標準
在 C 11 標準草稿中,似乎明確允許將內建函數視為 constexpr。然而,在 C 12 中共識發生了變化,提案發生了變化,導致 C 14 明確禁止這種行為。
假設規則
在 C 11 中,它目前還不清楚假定規則是否允許這種行為。有些意見認為可能,但這種解釋在處理此特定主題的 LWG 2013 號決議中並未得到證實。
GCC 的實施
GCC 實施此行為基於 LWG 2013 早期提出的決議,該決議允許隱式處理為 constexpr 函數。然而,最終的決議發生了變化,這個擴展現在在 C 14 中是不符合的。
嚴格模式下的一致性
為了符合C 14 標準,GCC遇到時應在嚴格一致性模式(-std=c 11 -pedantic 或- std=c 14 -pedantic)下發出警告constexpr 上下文中使用的非constexpr 函式庫函數。或者,應在這些模式下停用此行為。
內在函數豁免
標準不涵蓋編譯器內在函數,因此,它們可能會被區別對待。在 constexpr 上下文中使用編譯器內部函數很可能仍然可以接受。
以上是GCC 在 Constexpr 上下文中對非 constexpr 標準函式庫函數的擴充處理是否符合 C 標準?的詳細內容。更多資訊請關注PHP中文網其他相關文章!