【问题标题】:static class member of class's own type [duplicate]类自己类型的静态类成员[重复]
【发布时间】:2012-03-28 06:42:52
【问题描述】:

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

“一个类在其类主体完成之前不被视为已定义,一个类不能有它自己类型的数据成员。一个类可以有指向它自己类型的指针/引用的数据成员。”

  • C++ 入门 (Lippman Lajoie)

有道理。

但是为什么允许这样做呢?

class justAClass
{
     public  : 
     justAClass();

     private :          
     static justAClass justAMember;
}

对于指针,这是可以理解的。但是上面的东西将如何工作?我将如何决定此类对象的大小?拥有自己类型的成员,即使它是静态的,这不是递归情况(没有基本条件)吗?

【问题讨论】:

  • 静态成员数据不影响类的大小。

标签: c++ recursion static member


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 编译器在解析其声明后知道类大小和成员偏移量。在使用类中的任何内容的代码之前,它需要知道这些,而不仅仅是在定义实例时。
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多