为什么非常量静态成员有多个定义?

Kac*_*acy 4 c++ static const member redefinition

C++强制程序员在类外部定义一个非常量静态成员,我不断看到的原因是如果静态成员是在类中定义的,这将导致静态成员的多个定义.我知道有一个静态成员的多个定义是坏的,但我不明白这些多个定义甚至会来自何处.初始化的非常量静态成员不应该只进入数据部分并且这是唯一的定义吗?

struct Student {

   static int x = 4; // Why would this result in multiple definitions?

};
Run Code Online (Sandbox Code Playgroud)

另外,我在其他stackoverflow文章中读到,const静态成员只是在使用它的地方简单地内联到代码中: 为什么我不能在类中有一个非整数的静态const成员? 这是由预处理器和所有其他指令处理的吗?(如果需要,我会在另一篇文章中提出这个问题,但我不确定它是否值得单独发帖).

seh*_*ehe 6

这会发生是因为/当你的标题被包含在多个"翻译单元"中时(想想.cpp文件).

然后,每个TU将包含该定义的副本.

在链接时,他们会发生冲突.(链接器链接每个翻译单元的对象)

  • 我假设OP询问为什么构造是非法的 (2认同)