我们如何在与该类相同的数据类型的类中声明静态成员?

时间:2012-03-12 10:39:53

标签: c++ class static

  

可能重复:
  Why is a class allowed to have a static member of itself, but not a non-static member?

这是无效的代码

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数据类型,编译器如何知道这里分配了多少内存!!

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

3 个答案:

答案 0 :(得分:7)

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

您必须在其他位置定义静态成员,可能在.cpp文件中。那时编译器必须知道类的大小。

答案 1 :(得分:5)

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

答案 2 :(得分:1)

您只能在声明类中使用数据成员,该类的大小在该点已知,即定义已存在。编译器需要知道类实例在声明时所需的内存量。您可以使用指针和对[转发 - ] 声明的类型的引用(这些类型的大小与您的操作系统相当多)。

static 成员的声明未在成员实例中分配(这是 static 的意思),所以它只有在定义时才需要知道大小。