將非 Constexpr 標準函式庫函數視為 Constexpr 符合標準的編譯器擴充嗎?
目前的 C 標準要求將標準函式庫函數宣告為僅當明確需要時才使用 constexpr。然而,早期的草案另有建議。
C 11 和標準草案
在 C 11 的開發過程中,一項旨在明確允許將非 constexpr 標準函式庫函數視為constexpr。 GCC 決定以嚴格一致性模式支援此功能是基於此草案。
C 14 中共識的轉變
但是,共識在 C 14 的開發過程中發生了變化。該提案進行了修訂,最終標準規定,除非明確要求,否則禁止實現聲明任何標準庫函數 constexpr。
此變更源自於對跨實作的不同行為的擔憂,因為 SFINAE 可以利用此產生不同的結果相同程式碼的結果。
一致性GCC
GCC 目前在這種情況下的實現是一個不合格的擴展,因為它違反了 C 14 標準。為了實現一致性,GCC 需要在嚴格一致性模式下發出警告或停用此功能。
內在函數
與標準函式庫函數不同,編譯器內在函數不受此限制規則,因為它們不在標準範圍內。因此,將內在函數視為 constexpr 通常是允許的。
以上是GCC 對非 Constexpr 標準函式庫函數的 Constexpr 處理是合格擴充嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!