类的静态成员

问题描述:

可能重复:
Do static members of a class occupy memory if no object of that class is created?
Memory Allocation of Static Members in a Class类的静态成员

“A类不视为定义,直到它的类主体是完整的,一个类不能有数据成员是它自己的类型,一个类可以有数据成员,它们是指向它自己类型的指针/引用。“

  • C++引物(李普曼拉茹瓦)

有道理。

但是,为什么这是允许的呢?

class justAClass 
{ 
    public : 
    justAClass(); 

    private :   
    static justAClass justAMember; 
} 

对于指针是可以理解的。但是,这个事情将如何工作?我将如何决定这样一个班的对象的大小?它不是一个递归的情况下(没有基本条件)有一个自己的类型的成员,即使它是静态的?

+0

静态成员数据不会影响类的大小。 – 2012-03-28 07:10:57

类的原因不能有自己类型的数据成员是编译器必须知道类对象的大小。 例如,一个类是函数中的局部变量,编译器只能处理栈,它只知道类的大小。

对于您的情况,静态类成员不驻留在类对象中,因此不会影响类对象的大小。没关系。

形式上,区别在于类中静态成员的声明不是定义。您必须在别处提供一个定义(只需一次),编译器在遇到定义之前不需要知道大小。静态成员不会影响类本身的大小。 (在许多方面,类中的静态成员声明非常类似于非成员声明extern。)