在面向对象编程中,静态数据成员,称为类级变量,在类的所有实例之间共享。与存在于每个对象中的常规数据成员不同,静态数据成员存在于任何对象实例之外。
为了确保其唯一且一致的地址分配,静态数据成员需要在程序中进行单个显式定义。此定义不能放置在类定义中,因为类定义通常包含在多个对象文件中,从而导致潜在的重复定义。因此,静态数据成员定义必须单独声明。
非静态数据成员初始化(NSDMI)允许程序员为非静态指定一个初始值类定义中的数据成员。然而,这只是初始化,而不是定义。数据成员的实际定义,无论是静态还是非静态,都发生在类之外。
非静态数据成员存储在它们所属的对象内。它们的生命周期从对象的构造函数开始。另一方面,静态数据成员独立于对象而存在,从程序开始就驻留在固定的地址处。它们在编译时分配内存。
定义静态数据成员类似于在 C 中声明 extern 变量。 extern 变量声明,例如 extern int i;,表示变量 i 在程序的其他位置声明。同样,静态数据成员是在类定义中声明的,但它们的定义是使用 int X::i = 0; 等语法单独提供的,其中 X 是类名,i 是静态数据成员。
以上是为什么静态数据成员需要在 C 中进行类外初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!