静态数据成员,例如提供代码中的变量“i”,在初始化期间需要特殊处理。了解初始化器(分配值)和定义(声明变量存在)之间的区别非常重要。
在代码示例中,静态数据成员“i”在类定义之外初始化。这是一项要求,因为定义必须为变量提供内存中的地址,而该地址无法在类定义本身内确定。
另一方面,初始化程序只是将值分配给变量而不指定其值地址。这允许一种简洁的方法在一个地方设置初始值,避免需要在构造函数中重复它。
非静态数据成员,如“normalValue” ” 在示例中,存在于类的实例中。它们的地址取决于它们所属的实例。因此,非静态数据成员定义是在创建实例时创建的。
相反,静态数据成员具有固定的地址,并且独立于任何实例而存在。为了确保它们获得唯一的地址,链接器需要为每个静态数据成员精确定义一个定义。由于类定义通常包含在多个对象文件中,因此在类内定义静态数据成员将违反此要求。
要解决此问题,静态数据成员定义必须是放置在类声明之外。这确保它们出现在单个目标文件中,从而允许链接器分配正确的地址。
在类外部定义静态数据成员的概念类似于声明外部变量。 extern 声明表示该变量是在程序的其他位置定义的。同样,类定义中的静态数据成员声明可以视为 extern 声明,实际的定义单独提供。
以上是我们如何以及为什么在类定义之外初始化静态数据成员?的详细内容。更多信息请关注PHP中文网其他相关文章!