1

重複の可能性:
システムによって識別されるさまざまな関数の同じ名前の静的変数はどのように識別されますか?

コンパイラは、同じ名前であるが2つの異なる(静的)メンバー関数で定義されている2つのローカル静的変数をどのように区別しますか?

class Type
{
    public:
        static void fun()
        {
            static bool sameName = false;

            // work with sameName

        }
        static void moreFun()
        {
            static bool sameName = false;

            // work with sameName
        }
};
4

2 に答える 2

4

それはスコープと関係があります。

sameNameは2つの異なるスコープに存在します/この場合は2つの関数スコープ

したがって、内部的には、変数はfun.sameNameおよびmoreFun.sameNameという名前で参照される場合があります(名前は私が発明した単なる任意の名前ですが、原則を示しています)。

于 2012-05-30T12:47:42.133 に答える
2

C ++ SPEC(例:N3337)で次のように言います。

3キーワードstaticを使用して、静的ストレージ期間でローカル変数を宣言できます。

(ページ:62;セクション3.7.1静的保存期間)

あなたの場合、変数static bool sameNameは関数のスコープに属していますfun。そして、他の変数static bool sameNameは関数のスコープに属していますmoreFun。これらの2つの静的変数は、異なるスコープに属しています。キーワードのstatic効果は持続時間のみで、効果の範囲ではありません。

于 2012-05-30T13:14:56.847 に答える