根据IBM C ++知识中心上的静态数据成员的说法:类的成员列表中的静态数据成员的声明不是定义。您必须在名称空间范围内的类声明之外定义静态成员。这是为什么?关于内存分配的原理图是什么?
3 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
这是一种语言规则,称为“ 一个定义规则”。在程序中,每个静态对象(如果已使用)必须定义一次,并且只能定义一次。
类定义通常放在头文件中,头文件包含在多个翻译单元中(即来自多个源文件)。如果静态对象在标头中的声明是一个定义,那么您将得到多个定义,每个包含标头的单元中的定义都会违反规则。因此,它不是一个定义,您必须在其他位置提供一个定义。
原则上,该语言可以执行内联函数,将多个定义合并为一个定义。但事实并非如此,因此我们坚持使用此规则。
慕哥6287543
TA贡献1831条经验 获得超10个赞
从C ++ 17开始,您现在可以在类内定义静态数据成员。参见cppreference:
可以将静态数据成员声明为内联。内联静态数据成员可以在类定义中定义,并且可以指定初始化程序。它不需要类外定义:
struct X {
inline static int n = 1;
};
- 3 回答
- 0 关注
- 884 浏览
添加回答
举报
0/150
提交
取消