原始問題:
C 語言,是否可以從a計算constexpr 值(編譯時常數) constexpr 函數並將其儲存為類別的靜態成員?
第一次嘗試和編譯器的回應:
第一次嘗試在類別並使用foo 初始化靜態constexpr 成員bar 失敗,g -4.5.3 和g皆出現錯誤-4.6.3.
解釋:
根據C 標準,可以使用大括號或等號在類別定義中初始化靜態constexpr 資料成員-初始化器,其中每個初始化器子句必須是常數表達式。提供的程式碼違反了這條規則,因為 bar 的初始化依賴於類別體內的 const 表達式 foo(sizeof(int)),使其不是常數表達式。
進一步分析:
進一步的嘗試,包括將constexpr 函數定義移到類體之外,仍然導致g -4.6.3 中出現錯誤,突出顯示特定於編譯器的限制。
結論:
根據 C 標準,不允許在外部使用涉及 constexpr 函數呼叫的初始化器來初始化靜態 constexpr 資料成員。 constexpr 函數或 constexpr 建構函數的定義。這是因為 constexpr 變數必須可用作成員函數體內的編譯時常數。
以上是可以使用 C 中的 Constexpr 函數初始化靜態 Constexpr 成員嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!