確かに、これを行う理由は、C++ 11 がその厄介なルールを取り除いたので、治まりました. static const int/char/enum をヘッダーで初期化できると宣言していたと思いますが、他のすべての型については、できませんでした。このため、C++ の規則の宣言と定義についてまとめてみました。
誰かが私が試みた/下で行ったことを取り、私が逃した/間違ったもののためにそれを拡張することができますか. さまざまな static/const/int/non-int 変数の宣言と定義に関するすべての「規則」をまとめたいと思います。理想的には、これを 3 つの列 (データの型/宣言/定義) を持つある種のテーブルに入れることができますが、ここでそれを行う方法がわかりません:
静的データ メンバー(宣言)
- タイプと名前のみを指定し、初期化しないでください。同じヘッダーを使用する複数のファイルが複数のコピーを作成することになるためです。
静的データ メンバー(定義)
- ソース ファイル内の変数を初期化します。ソース ファイル定義で「静的」という単語を繰り返す必要はありません。
const データメンバー(宣言)
- キーワード const を使用してヘッダー ファイルで宣言されていますが、初期化されていません。
const データメンバー(定義)
- コンストラクターで初期化リストを使用して初期化する必要があります。
static および constデータ メンバー (宣言)
- キーワード static および const を使用してヘッダー ファイルで宣言されていますが、初期化されていません。
static および constデータ メンバー (定義)
- ソースファイルで定義されています。キーワード static および const (??) を使用する必要はありません。
注意: C++11 以前の int/enum/char には static (または static const でしたか?) に関する特別な規則があったことを理解していますが、それらはヘッダーで初期化できたのでしょうか??
- グローバル変数のルール
- ミュータブルのルール
- extern のルール
- volatile は "const" とまったく同じ規則に従いますか? 静的な揮発性は、静的データメンバーなどの規則に従いますか?