関数レベルの静的変数の初期化
C では、関数レベルの静的変数は関数内の状態を維持するための便利なメカニズムです。ただし、割り当てと初期化のプロセスには疑問が生じることがあります。
プログラムの開始時に割り当てられ初期化されるグローバルに宣言された変数とは異なり、関数レベルの静的変数は、関数が初めて呼び出されるまで割り当ても初期化もされません。 .
次のコード スニペットを考えてみましょう:
void doSomething() { static bool globalish = true; // ... }
この例では、静的変数 globalish は割り当てられません。または関数 doSomething() が呼び出されるまで初期化されます。これを実証するために、テスト プログラムを分析してみましょう。
#include <iostream> class test { public: test(const char *name) : _name(name) { std::cout << _name << " created" << std::endl; } ~test() { std::cout << _name << " destroyed" << std::endl; } std::string _name; }; test t("global variable"); void f() { static test t("static variable"); test t2("Local variable"); std::cout << "Function executed" << std::endl; } int main() { test t("local to main"); std::cout << "Program start" << std::endl; f(); std::cout << "Program end" << std::endl; return 0; }
コンパイルして実行すると、関数 f() の静的変数 t のコンストラクターは、その関数が呼び出されるまで呼び出されないことが出力からわかります。初回:
global variable created local to main created Program start static variable created Local variable created Function executed Local variable destroyed Program end local to main destroyed static variable destroyed global variable destroyed
したがって、関数レベルの静的変数はプログラムの開始時ではなく、最初の呼び出し時に割り当てまたは初期化されます。それらが定義されている関数の。
以上がC の関数レベルの静的変数はいつ初期化されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。