【发布时间】:2013-09-11 18:53:54
【问题描述】:
根据 IBM C++ 知识中心的Static data members:
类成员列表中静态数据成员的声明不是定义。您必须在类声明之外,在命名空间范围内定义静态成员。
这是为什么呢?关于内存分配的原理是什么?
【问题讨论】:
-
我自己一直想知道这一点。它总是“似乎”像标题一样是定义静态的更合适的地方。
-
@koodawg Java 结合了标头 + 源代码实现 =]
-
原因是一个类可能在许多翻译单元中被声明(通过#include),如果在所有翻译单元上都定义了它,就会有一个重复的符号。
-
静态类成员具有外部链接,并且必须遵守对该模型的限制,只有一个定义。随着编译器变得更聪明,也有例外(
static const积分成员)。如果它有帮助,请将它们视为全球externdecl,其中必须有一个定义来满足该法案。