关闭类括号后的名称是什么意思?

San*_*lin 9 c++

我遇到过这个代码示例,我记得我之前见过它,但我不知道它是什么以及它做了什么?我在互联网上搜索但没有运气.

码:

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);
}
Run Code Online (Sandbox Code Playgroud)

是什么g_c在最后一堂课托架装置后?

Naw*_*waz 17

} g_c;
Run Code Online (Sandbox Code Playgroud)

这里g_c声明是类类型的对象C.

这样的构造使您可以创建未命名类型的对象:

class  //Nameless class!
{
   //data members

}obj1, obj2;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,obj1并且obj2被声明为没有给出任何名字的类类型的对象 - 该类是无名的!在这种情况下,您无法以传统意义(即Type obj1, obj2;意义)声明对象.所以这个结构可以帮助你做到这一点

您甚至可以在无名的情况下从其他命名类派生(并声明无名类的对象):

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

}obj1, obj2;
Run Code Online (Sandbox Code Playgroud)

简而言之,这个构造确保用户不能创建比预期更多的对象,除非一些邪恶的程序员使用/误用/滥用C++ 11(或模板):

decltype(obj1) obj3; //hehe!
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!


Dre*_*wen 13

它是以下的简写:

class C
{
    ....
};

C g_c;
Run Code Online (Sandbox Code Playgroud)