4

静的グローバル関数内に静的ローカル変数がある場合 (class static、global static ではありません)...

foo.cpp:

static void f()
{
    static T x;
    ...
}

x インスタンスは、アプリケーション全体でシングルトンであることが保証されていますか?

2 つの翻訳単位static void f()が上記のように定義されている場合はどうなるでしょうか。それぞれが独自の x インスタンスを持っていますか、それとも共有しますか? なんで?

4

2 に答える 2

4

static関数には内部リンケージがあるためf、各翻訳単位のそれぞれが異なる独立した関数になり、x翻訳単位ごとに のインスタンスが存在します。

于 2012-12-27T04:22:26.153 に答える
2

x インスタンスは、アプリケーション全体でシングルトンであることが保証されていますか?

f()最初に呼び出されたときに作成されることが保証されています。それは、他のものと一緒に(作成の逆順で)static storage duration object破壊されることを意味します。static storage duration object

この変数xは、関数内でのみ表示されますf()

上記のように、2 つの翻訳単位で static void f() が定義されている場合はどうなるでしょうか。それぞれが独自の x インスタンスを持っていますか、それとも共有しますか? なんで?

これは静的関数であるためです。翻訳単位に対してローカルです。この関数を定義する各翻訳単位には、関数とその内部変数の両方の独自のコピーがあります。これは翻訳単位の外部に公開されないため、翻訳単位内からのみ可能です。

于 2012-12-27T04:35:57.737 に答える