首頁 >後端開發 >C++ >如何使用 C 中的靜態函數初始化靜態 Constexpr 成員?

如何使用 C 中的靜態函數初始化靜態 Constexpr 成員?

Linda Hamilton
Linda Hamilton原創
2024-12-07 21:42:14310瀏覽

How Can I Initialize a Static Constexpr Member with a Static Function in C  ?

使用靜態函數初始化靜態成員Constexpr

問題:

您想要定義一個constexpr 成員具有靜態函數,在編譯時使用計算值對其進行初始化。但是,您嘗試在 GCC 中執行此操作時會遇到編譯錯誤。

初始嘗試:

您的第一次嘗試將靜態 constexpr 成員和函數放置在類別定義中,觸發舊版本 GCC 中的編譯錯誤。您的第二次嘗試將這些元素移到了類別主體之外,但您在後續版本中再次遇到了問題。

說明:

C 標準規定了 constexpr static 的特定要求資料成員。這些成員必須使用大括號或等於初始化程序進行初始化,其中每個賦值都是一個常數表達式。在您的「第二次嘗試」中,您沒有遵守此格式。

解:

不幸的是,目前還沒有使用靜態函數初始化 constexpr 靜態資料成員根據 C 標準是可能的。這是因為 constexpr 變數必須可作為成員函數體內的編譯時常量使用。然而,靜態函數在類別完成之前是未定義的,使得表達式不可能成為常數表達式。

GCC 中觀察到的問題:

您的第一次嘗試應該是有效的,但可能在早期版本的 GCC 中遇到了錯誤。如果您可以存取更新版本的 GCC,那麼值得再次嘗試初始程式碼。

以上是如何使用 C 中的靜態函數初始化靜態 Constexpr 成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn