-1

確かに、これを行う理由は、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" とまったく同じ規則に従いますか? 静的な揮発性は、静的データメンバーなどの規則に従いますか?
4

1 に答える 1

0

C++ 標準では、constvolatileはほぼ常に「互いに隣接」しています。特に、volatileandconstの優先順位と「場所の必要性」は同じです。

C++11より前(そしてもちろんC++11でも)const static、単純な型(つまり、intまたは密接に関連する型など)を初期化できますが、他の型(たとえば、コンストラクターを持つもの)は初期化できません。

于 2013-07-20T19:08:09.600 に答える