在内存中存储为对象意味着什么?

时间:2013-08-28 16:15:09

标签: c++ class

在TC ++ PL中,作者说

  

当且仅当您以某种方式使用初始化(静态)成员时   要求它作为对象存储在内存中,成员必须是   在某处唯一定义。

但是,我不知道在内存中存储为对象意味着什么。我想静态成员已经在内存中是否实例化了它的类的对象。为了您的信息,作者介绍了一个示例。

class Curious {
public:
    static const int cl = 7;
    ....
}
const int Curious::cl;

它看起来像某种实例化。但是,我不知道为什么这是必要的。我们可以直接访问Curious :: cl。

1 个答案:

答案 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选择的内存可能会因您使用的源文件。在“更大”的计算机中,这不是一个问题,但是,语言定义仍然不知道你将如何使用该语言,因此必须满足它可能重要的各种变体]。