使用靜態函數初始化靜態成員Constexpr
問題:
您想要定義一個constexpr 成員具有靜態函數,在編譯時使用計算值對其進行初始化。但是,您嘗試在 GCC 中執行此操作時會遇到編譯錯誤。
初始嘗試:
您的第一次嘗試將靜態 constexpr 成員和函數放置在類別定義中,觸發舊版本 GCC 中的編譯錯誤。您的第二次嘗試將這些元素移到了類別主體之外,但您在後續版本中再次遇到了問題。
說明:
C 標準規定了 constexpr static 的特定要求資料成員。這些成員必須使用大括號或等於初始化程序進行初始化,其中每個賦值都是一個常數表達式。在您的「第二次嘗試」中,您沒有遵守此格式。
解:
不幸的是,目前還沒有使用靜態函數初始化 constexpr 靜態資料成員根據 C 標準是可能的。這是因為 constexpr 變數必須可作為成員函數體內的編譯時常量使用。然而,靜態函數在類別完成之前是未定義的,使得表達式不可能成為常數表達式。
GCC 中觀察到的問題:
您的第一次嘗試應該是有效的,但可能在早期版本的 GCC 中遇到了錯誤。如果您可以存取更新版本的 GCC,那麼值得再次嘗試初始程式碼。
以上是如何使用 C 中的靜態函數初始化靜態 Constexpr 成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!