为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
牛魔王的故事 2019-10-21 10:46:48
根据IBM C ++知识中心上的静态数据成员的说法:类的成员列表中的静态数据成员的声明不是定义。您必须在名称空间范围内的类声明之外定义静态成员。这是为什么?关于内存分配的原理图是什么?
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

这是一种语言规则,称为“ 一个定义规则”。在程序中,每个静态对象(如果已使用)必须定义一次,并且只能定义一次。

类定义通常放在头文件中,头文件包含在多个翻译单元中(即来自多个源文件)。如果静态对象在标头中的声明是一个定义,那么您将得到多个定义,每个包含标头的单元中的定义都会违反规则。因此,它不是一个定义,您必须在其他位置提供一个定义。

原则上,该语言可以执行内联函数,将多个定义合并为一个定义。但事实并非如此,因此我们坚持使用此规则。


查看完整回答
反对 回复 2019-10-21
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

从C ++ 17开始,您现在可以在类内定义静态数据成员。参见cppreference:


可以将静态数据成员声明为内联。内联静态数据成员可以在类定义中定义,并且可以指定初始化程序。它不需要类外定义:


struct X {

     inline static int n = 1; 

};


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 884 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信