4

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

struct Student {

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

};

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

4

1 回答 1

6

这会发生,因为/当您的标题包含在多个“翻译单元”中时(想想 .cpp 文件)。

然后每个 TU 将包含定义的副本。

在链接时,它们会发生冲突。(链接器链接来自每个翻译单元的对象)

于 2013-09-22T22:29:48.450 回答