我们如何能够在与类具有相同数据类型的类中声明静态成员

How are we able to declare a static member in a class of the same datatype as the class?

本文关键字:数据类型 静态成员 声明 何能够 我们      更新时间:2023-10-16

可能重复:
为什么一个类本身允许有一个静态成员,而不是一个非静态成员?

这是一段无效的代码

struct a{
   a mem;    //Invalid as the compiler does not know how much memory to allocate
  };

但这是有效的:

class Date{
  int d,m,y;
  static Date Default_date;  //Valid
};

在Date数据类型定义不正确之前,编译器怎么能在这里知道要分配多少内存!!

这在某种意义上与其他静态定义不同吗???

静态成员不存储在类内,因此其大小不会影响类的总大小。

您将不得不在其他地方定义静态成员,可能是在.cpp文件中。到那时,编译器必须知道类的大小。

在第一种情况下,它是无效的,因为它是一个大小无限的递归结构。在第二种情况下,这是可以的,因为实际内存分配发生在声明之后。

您只能在类声明中使用其大小已知的数据成员,即已经存在定义的数据成员。编译器需要知道类实例在被声明时所需的内存量。您可以使用指向[forward-]声明的类型的指针和引用(无论您的操作系统有多少位,这些类型的大小都是一样的)。

static成员的声明没有在成员实例内分配(这就是静态的使用含义),因此只有在定义时才需要知道其大小。