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

可以使用 C 中的 Constexpr 函數初始化靜態 Constexpr 成員嗎?

Barbara Streisand
發布: 2024-12-04 06:50:20
原創
1063 人瀏覽過

Can a Static Constexpr Member Be Initialized Using a Constexpr Function in C  ?

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

原始問題:

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中文網其他相關文章!

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