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

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

Mary-Kate Olsen
發布: 2024-11-30 07:02:17
原創
1042 人瀏覽過

How Can I Initialize a Static constexpr Member Using a Static constexpr Function in C  ?

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

問題

目標是取得從constexpr 計算的編譯時常數(constexpr 值)函數,都在同一個類別命名空間內。

首先嘗試

class C1 {
  constexpr static int foo(int x) { return x + 1; }
  constexpr static int bar = foo(sizeof(int));
};
登入後複製

但是,這在 g -4.5.3 和 g -4.6.3 上都失敗了,因為在初始化器中使用了非常量表達式。

第二次嘗試

class C2 {
  constexpr static int foo(int x) { return x + 1; }
  constexpr static int bar;
};
constexpr int C2::bar = C2::foo(sizeof(int));
登入後複製

雖然這在 g -4.5.3、g -4.6.3 上編譯顯示不一致和重新聲明錯誤。

說明

根據C 標準(第9.4.2 節), constexpr 靜態資料成員只能用大括號或等於初始化器宣告類別定義,其中每個初始化子句都必須是常量表達式。

在「第二次嘗試」中,聲明缺少所需的大括號或等於初始值設定項。

結論

與最初的假設相反,這兩次嘗試都失敗了。標準禁止在類別完整的上下文中初始化靜態 constexpr 資料成員。

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

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