在TC ++ PL中,作者说
当且仅当您以某种方式使用初始化(静态)成员时 要求它作为对象存储在内存中,成员必须是 在某处唯一定义。
但是,我不知道在内存中存储为对象意味着什么。我想静态成员已经在内存中是否实例化了它的类的对象。为了您的信息,作者介绍了一个示例。
class Curious {
public:
static const int cl = 7;
....
}
const int Curious::cl;
它看起来像某种实例化。但是,我不知道为什么这是必要的。我们可以直接访问Curious :: cl。
答案 0 :(得分:3)
现在,我们还要说class Curious
在一个头文件中,它包含在6个不同的源文件中(s1.cpp到s6.cpp给它们一个名字)。
我们需要,因为某些“正当理由”取得cl
...
编译器应该在什么位置放置cl
变量?请注意,当编译器执行它的工作时,它(通常)一次只能看到一个源文件,因此它不知道Curious
类定义有多少次,因此发生static const int cl = 7;
多少次在代码中。所以它不能说“哦,我在s1.cpp中有一个cl
,所以当我编译s2.cpp ... s6.cpp时,我不需要一个”。
换句话说,编译器需要您的帮助才能将cl
“放置”到目标文件中。
[这在嵌入式系统中会变得更有趣,其中数据可能位于内存的不同“部分”中,具体取决于您编译它的源文件,因此为cl
选择的内存可能会因您使用的源文件。在“更大”的计算机中,这不是一个问题,但是,语言定义仍然不知道你将如何使用该语言,因此必须满足它可能重要的各种变体]。