在 C 领域,静态数据成员驻留在类内,但超越了类的边界,需要在类外部定义班级本身。正如 IBM 的 C 知识中心所确认的那样,“类的成员列表中的静态数据成员的声明不是定义……[它]必须在类声明之外、命名空间范围内定义静态成员。”为什么要执行这条规则?哪些潜在的内存分配考虑因素需要这种做法?
这一任务背后的原则在于该语言的基本“单一定义规则”。这一规则规定程序中使用的所有静态对象必须精确地具有一个定义,并且仅具有一个定义。类定义通常位于头文件中,经常跨多个翻译单元(源文件)合并。如果静态对象的声明放在标头中,则每个包含的单元都会产生一个单独的定义,直接违反了单一定义规则。
为了规避这一危险,标头中的类定义仅声明静态数据成员而不定义它们。这迫使程序员在其他地方提供明确的定义。虽然理论上该语言可以将多个定义合并为一个,就像使用内联函数一样,但静态数据成员的情况并非如此。因此,我们只剩下语言对静态数据成员的外部定义的要求。
以上是为什么 C 静态数据成员必须在类外部定义?的详细内容。更多信息请关注PHP中文网其他相关文章!