C ++强制程序员在类外定义一个非常量静态成员,我不断看到的原因是如果静态成员是在类中定义的, 这将导致静态成员的多个定义。我明白了 静态成员的多个定义很糟糕,但我不明白这些多重的位置 定义甚至可以来自。不应该是初始化的非常量静态成员 只是进入数据部分,这是唯一的定义?
struct Student {
static int x = 4; // Why would this result in multiple definitions?
};
另外,我在其他stackoverflow文章中读到,const静态成员只需内联到代码中,无论它在何处使用: Why can't I have a non-integral static const member in a class? 这是由预处理器和所有其他指令处理的吗? (如果需要,我会在另一篇文章中提出这个问题,但是我 不确定是否值得单独发帖。)
答案 0 :(得分:6)
会发生这种情况,因为/当您的标题包含在多个“翻译单元”中时(想想.cpp文件)。
每个TU将包含该定义的副本。
在链接时,他们会发生冲突。 (链接器链接来自每个翻译单元的对象)