1

次のファイルがあります。

Hファイル

class myclass
{
   static int variable;

   // constructor
   myclass();
}

Cpp ファイル

// initialize this variable
int myclass::variable = 0;

myclass::myclass()
{
   // I use here the static variable
}

私の質問は: 静的変数はいつ初期化されるのですか? コンストラクターの最初または後?

私が置くとどうなりますか

int myclass::variable = 0;

クラスコンストラクター定義の後の行? クラスのオブジェクトがインスタンス化される前に初期化されますか?

4

1 に答える 1

2

このような static は、アプリケーションの起動時に初期化されます。これは、「myclass」をインスタンス化する前に行われると思います。

このため、基本的にどこで定義しても問題ありません。

ただし、「myclass」のグローバル コピーを作成すると、問題が発生する可能性があると思います。変数の初期化の前に定義を置くことは完全に合法です。

myclass globalInstance;
int myclass::variable = 0;

上記の場合、変数が初期化される前に myclass のコンストラクターが呼び出されると確信しています。そのような場合は、変数の後に myclass を定義するのが最善です。

編集: http://www.parashift.com/c++-faq/static-init-order.htmlを参照してください

于 2012-07-21T10:03:06.970 に答える