可能重复:
Do static members of a class occupy memory if no object of that class is created?
Memory Allocation of Static Members in a Class
“一个类不被认为是定义的,直到它的类体完整,一个类不能拥有自己类型的数据成员。一个类可以有数据成员作为指针/引用它自己的类型。”
有道理。
但为什么允许这样呢?
class justAClass
{
public :
justAClass();
private :
static justAClass justAMember;
}
对于指针,这是可以理解的。但是上面这个怎么样呢?我将如何决定这类课程的大小?它是一个递归的情况(没有基本条件)来拥有自己类型的成员,即使它是静态的吗?
答案 0 :(得分:8)
类的原因不能是拥有自己类型的数据成员,编译器必须知道类对象的大小。 例如,一个类是函数中的局部变量,编译器只能知道类的大小才能处理堆栈。
对于您的情况,静态类成员不驻留在类对象中,因此不会影响类对象的大小。没关系。
答案 1 :(得分:3)
形式上,区别在于类中静态成员的声明不是定义。您必须在其他地方(恰好一次)提供定义,并且编译器在遇到定义之前不需要知道大小。静态成员不会影响类本身的大小。 (在很多方面,类中的静态成员声明非常类似于extern
非成员声明。)