为什么需要在类之外定义静态数据成员? [英] Why does a static data member need to be defined outside of the class?

查看:30
本文介绍了为什么需要在类之外定义静态数据成员?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据 静态数据成员在 IBM C++ 知识中心:

According to Static data members on the IBM C++ knowledge center:

类的成员列表中静态数据成员的声明不是定义.您必须在类声明之外的命名空间范围内定义静态成员.

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.

这是为什么?关于内存分配的原理图是什么?

Why is that? What's the schematic behind that regarding the memory allocation?

推荐答案

这是语言的一条规则,称为一个定义规则.在一个程序中,每个静态对象(如果使用的话)必须定义一次,而且只能定义一次.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆