ホームページ > バックエンド開発 > C++ > C 関数の静的変数はどのくらいの期間存続しますか?

C 関数の静的変数はどのくらいの期間存続しますか?

Patricia Arquette
リリース: 2024-12-30 14:03:22
オリジナル
1012 人が閲覧しました

How Long Do Static Variables in C   Functions Live?

C 関数の静的変数の有効期間

関数のスコープ内で変数を static として宣言すると、関数のスコープ内で変数が 1 回だけ初期化され、その値が維持されるようになります。関数の呼び出し。正確な有効期間を理解することは非常に重要です。

静的変数はいつ作成され、破棄されますか?

関数内の静的変数には、宣言が最初に行われたときから有効期間があります。プログラム終了まで。これは、次のことを意味します。

  • コンストラクターは最初の宣言中に呼び出されます。
  • デストラクターは、プログラムの終了時、または変数がスコープ外に出るとき (関数の終了など) に呼び出されます。

建設/破壊の追跡順序

静的変数の構築と破棄の順序を決定することは、特にマルチスレッド環境では不可欠です。標準では、静的オブジェクトのデストラクターは構築完了の逆の順序で実行されることが規定されています。

実装例

次のコードを考えてみましょう。スニペット:

struct emitter {
    string str;
    emitter(const string& s) : str(s) { cout << "Created " << str << endl; }
    ~emitter() { cout << "Destroyed " << str << endl; }
};

void foo(bool skip_first) {
    if (!skip_first)
        static emitter a("in if");
    static emitter b("in foo");
}

int main(int argc, char*[])
{
    foo(argc != 2);
    if (argc == 3)
        foo(false);
}
ログイン後にコピー

出力:

C:>sample.exe
Created in foo
Destroyed in foo
C:>sample.exe 1
Created in if
Created in foo
Destroyed in foo
Destroyed in if
C:>sample.exe 1 2
Created in foo
Created in if
Destroyed in if
Destroyed in foo
ログイン後にコピー

これは、静的変数の有効期間と構築/破壊順序を示します。

以上がC 関数の静的変数はどのくらいの期間存続しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート