我们如何能够在与类具有相同数据类型的类中声明静态成员
How are we able to declare a static member in a class of the same datatype as the class?
可能重复:
为什么一个类本身允许有一个静态成员,而不是一个非静态成员?
这是一段无效的代码
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成员的声明没有在成员实例内分配(这就是静态的使用含义),因此只有在定义时才需要知道其大小。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 重载具有 2 个相同数据类型成员的构造函数
- C++ 成员不是变量,而只是数据类型的名称吗?
- 错误:请求"数据"中的成员"大小",其非类类型为"int [5]"
- 从相同类型的静态成员进行类内初始化
- 在类定义中推导内联静态成员函数的返回类型
- 如何声明和定义具有推导类型的静态成员
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 初始化在类类型 #define 中定义的非静态成员数组,不带默认 ctor
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 缺少类型说明符 - int 假定 声明静态成员后出错
- 定义非静态成员时获取C++中的"this"类型
- 创建类型列表并访问每种类型的静态成员?
- 使用各种数据类型成员创建对象的简便方法
- 使用静态成员函数访问静态数据成员
- 类型为专用数据成员的静态成员
- 参考类型静态数据成员的问题可能是编译器错误
- 我们如何能够在与类具有相同数据类型的类中声明静态成员