首頁 > 後端開發 > C++ > 將非 constexpr 標準函式庫函數視為'constexpr”符合 C 標準嗎?

將非 constexpr 標準函式庫函數視為'constexpr”符合 C 標準嗎?

Linda Hamilton
發布: 2024-12-03 19:32:14
原創
267 人瀏覽過

Is Treating Non-constexpr Standard Library Functions as `constexpr` Conforming to the C   Standard?

將非constexpr 標準函式庫函數視為Constexpr:一致性分析

問題是編譯器擴充是否處理非constexpr 標準constexpr 的函式庫函數是一致的。儘管 C 11 標準草案允許此類處理,但隨後的發展澄清了這個問題。

C 14 明確禁止

在C 14 中,標準草案第17.6.5.6 節明確指出,除非明確指出,否則實作不得將任何標準函式庫簽章聲明為constexpr 必需的。該裁決禁止將非 constexpr 標準函式庫函數視為 constexpr。

GCC 擴充

GCC 實作了一個將某些內建函數視為 constexpr 的擴充。然而,根據更新的 C 14 標準,此擴展被認為是不符合標準的。

As-if 規則和可觀察行為

最初不清楚 as- if 規則允許將非 constexpr 函數視為 constexpr。假設規則允許實現偏離標準的要求,只要它們產生等效的可觀察行為。但是,更改函數的 constexpr 狀態會影響可觀察到的行為,如 SFINAE 測試所示,使用相同的程式碼時,其行為會有所不同。

符合緩解措施

為了使符合GCC 擴展,編譯器需要在嚴格一致性模式下發出警告(例如,-std=c 11 -pedantic)當在constexpr 上下文中使用非constexpr 標準函式庫函數時。

內在函數異常

編譯器內在函數不包含在標準中,可以免除 constexpr 函數規則。使用內建內在函數(例如 __builtin_cos)作為 constexpr 可能是被允許的。

以上是將非 constexpr 標準函式庫函數視為'constexpr”符合 C 標準嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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