为什么需要在类外部定义静态数据成员? [英] Why does a static data member need to be defined outside of the class?
问题描述
根据静态数据成员:
静态数据成员的声明在类的成员列表中不是定义。您必须在类声明之外的命名空间范围中定义静态成员。
The declaration of a static data member in the member list of a class is not a definition. You must define the static member outside of the class declaration, in namespace scope.
为什么?
推荐答案
这是语言的规则,被称为一个定义规则。在一个程序中,每个静态对象(如果使用)必须定义一次,只能定义一次。
It's a rule of the language, known as the One Definition Rule. Within a program, each static object (if it's used) must be defined once, and only once.
类定义通常放在头文件中,包含在多个翻译单元即从多个源文件)。如果头中的静态对象的声明是一个定义,那么你最终会得到多个定义,每个单元中包含一个头,这将破坏规则。
Class definitions typically go in header files, included in multiple translation units (i.e. from multiple source files). If the static object's declaration in the header were a definition, then you'd end up with multiple definitions, one in each unit that includes the header, which would break the rule. So instead, it's not a definition, and you must provide exactly one definition somewhere else.
原则上,语言可以做它做什么具有内联函数,允许将多个定义合并为单个定义。但它没有,所以我们坚持这个规则。
In principle, the language could do what it does with inline functions, allowing multiple definitions to be consolidated into a single one. But it doesn't, so we're stuck with this rule.
这篇关于为什么需要在类外部定义静态数据成员?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!