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

4

C++强制程序员在类外定义非常量静态成员,我一直看到的原因是如果静态成员在类内定义,这将导致静态成员有多个定义。我理解同一个静态成员有多个定义是不好的,但是我不明白这些多余的定义甚至会发生在哪里。难道一个已初始化的非常量静态成员不仅仅只是进入数据段吗,这就是唯一的定义吗?

struct Student {

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

};

此外,我在另一篇stackoverflow文章中看到,const static成员只是简单地内联到代码中,无论它被放置在哪里: 为什么我不能在类中有一个非整数静态const成员? 这是否由预处理器与所有其他指示一起处理?(如果需要,我将在另一篇文章中提出此问题,但我不确定它是否值得另开一篇文章。)
1个回答

6
当你的头文件被包含在多个“翻译单元”(比如 .cpp 文件)中时,这种情况就会发生。
每个翻译单元都将包含一份定义的副本。
在链接时,它们将发生冲突。(链接器将来自每个翻译单元的对象进行链接)

请您能否提供一个例子? - Kacy
2
我假设OP是在询问为什么这个结构是非法的。 - sehe
@sehe 是的,那就是我所问的。 - Kacy
@sehe 实际上,不需要示例。你的答案已经足够帮助我理解了。谢谢。 - Kacy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接