我遇到过这个代码示例,我记得我之前见过它,但我不知道它是什么以及它做了什么?我在互联网上搜索但没有运气.
码:
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)
希望有所帮助!