2

.cpp にコードがあります

namespapce A
{
    namespace
    {
        static CMutex initMutex;
    }

    void init()
    {
        //code here
    }

    void uninit()
    {
        //code here
    }
}

ミューテックスの静的を削除した場合と静的がある場合の違いは何ですか? そして、スタティックの使用は何ですか?

ありがとう!

4

3 に答える 3

2

あなたは一種のCとC ++を混同しています。Cのキーワードstaticには、変数の範囲を翻訳単位にまで絞り込む意図があります。翻訳単位でグローバルに定義できましたが、他の翻訳単位からは見えませんでした。Bjarne Stroustrup は、C でlikenamespacesを使用する代わりに、C++ でanonymous を使用することを推奨しています。static

この投稿から、それは言う

C++ 標準は、セクション 7.3.1.1 名前のない名前空間、段落 2 を読み取ります。

The use of the static keyword is deprecated when declaring objects 
in a namespace scope, the unnamed-namespace provides a superior alternative.

static は、型宣言ではなく、オブジェクト、関数、および無名共用体の名前にのみ適用されます。

于 2013-04-05T08:24:24.720 に答える
2

static は次の 2 つのことを行うだけです。

  • プログラムの存続期間全体にわたって存在する変数を作成します (ただし、これはグローバル レベルであるため、ここにあるものはすべてプログラムの存続期間にわたって存在します!)

  • 宣言されている翻訳単位でのみ変数を可視にします (ただし、これは匿名名前空間にあるものすべてに適用されます)。

したがって、実際、この特定のコンテキストでは、static は何もしません

于 2013-04-05T08:41:53.673 に答える