13

このコード例に遭遇しましたが、以前に見たことがあることを思い出しましたが、それが何のためにあるのか、何をするのかわかりませんでした。インターネットで検索しましたが、運がありません。

コード:

class C
{
    int x; // a non-static variable, implicitly private

public:
    C() : x(0) {} // default constructor

    // a static member function, which uses a non-static variable perfectly well
    static int Incr(C& instance) { return ++(instance.x); }
} g_c;

int main(void)
{
    C c2;
    return C::Incr(g_c) + C::Incr(c2);
}

g_c最後のクラス ブラケットの後の意味は何ですか?

4

4 に答える 4

21
} g_c;

Hereg_cはクラス type のオブジェクトとして宣言されていますC

このような構成により、名前のない型のオブジェクトを次のように作成できます。

class  //Nameless class!
{
   //data members

}obj1, obj2;

この例では、obj1obj2は、名前が与えられていないクラス型のオブジェクトであると宣言されています — クラスは無名です! このような状況では、従来の意味 (Type obj1, obj2;意味) でオブジェクトを宣言することはできません。したがって、この構造はそれを行うのに役立ちます。

名前のない (そして名前のないクラスのオブジェクトを宣言している)間に、他の名前付きクラスから派生することもできます。

class : public A, public B //Nameless class is deriving from A and B
{
   //data members

}obj1, obj2;

つまり、悪質なプログラマーが C++11 (またはテンプレート) を次のように使用/誤用/悪用しない限り、この構成により、ユーザーが意図したよりも多くのオブジェクトを作成できないことが保証されます。

decltype(obj1) obj3; //hehe!

それが役立つことを願っています!

于 2013-07-24T19:30:48.663 に答える
14

次の省略形です。

class C
{
    ....
};

C g_c;
于 2013-07-24T19:29:43.720 に答える