gpt4 book ai didi

c++ - 作为对象存储在内存中是什么意思?

转载 作者:行者123 更新时间:2023-11-30 02:52:52 24 4
gpt4 key购买 nike

在TC++PL中,作者说

If and only if you use an initialized (static) member in a way that requires it to be stored as an object in memory, the member must be uniquely defined somewhere.

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

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

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

最佳答案

现在,我们还假设 class Curious 位于一个头文件中,该文件包含在 6 个不同的源文件中(s1.cpp 到 s6.cpp 以给它们命名)。

并且出于某些“充分的理由”,我们需要获取 cl 的地址...

编译器应该把这个 cl 变量放在什么地方?请注意,当编译器完成它的工作时,它(通常)一次只能看到一个源文件,因此它不知道 Curious 类定义了多少次,因此也不知道 static const int cl = 7; 出现在代码中。所以它不能说“哦,我在 s1.cpp 中有一个 cl,所以当我编译 s2.cpp ... s6.cpp 时,我不需要一个”。

换句话说,编译器需要您的帮助才能将cl“放置”到目标文件中。

[这在嵌入式系统中会变得更加有趣,在嵌入式系统中,数据很可能位于内存的不同“部分”中,具体取决于您将其编译为哪个源文件,因此为 cl 选择的内存可能会根据您使用的源文件而改变。在“更大”的计算机中,这不是一个问题,但是,语言定义仍然不知道您将如何使用该语言,因此必须在可能重要的地方迎合各种变体]。

关于c++ - 作为对象存储在内存中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18493167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com