为什么需要在类外部定义静态数据成员?

根据IBM C ++知识中心上的静态数据成员的说法:


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


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


牛魔王的故事
浏览 885回答 3
3回答

紫衣仙女

这是一种语言规则,称为“ 一个定义规则”。在程序中,每个静态对象(如果已使用)必须定义一次,并且只能定义一次。类定义通常放在头文件中,头文件包含在多个翻译单元中(即来自多个源文件)。如果静态对象在标头中的声明是一个定义,那么您将得到多个定义,每个包含标头的单元中的定义都会违反规则。因此,它不是一个定义,您必须在其他位置提供一个定义。原则上,该语言可以执行内联函数,将多个定义合并为一个定义。但事实并非如此,因此我们坚持使用此规则。

慕哥6287543

从C ++ 17开始,您现在可以在类内定义静态数据成员。参见cppreference:可以将静态数据成员声明为内联。内联静态数据成员可以在类定义中定义,并且可以指定初始化程序。它不需要类外定义:struct X {     inline static int n = 1; };
打开App,查看更多内容
随时随地看视频慕课网APP