作为一个对象存储在内存中意味着什么
What does it mean to be stored as an object in memory?
在TC++PL中,作者说
如果且仅当您使用初始化(静态)成员的方式要求将其作为对象存储在内存中,该成员必须在某个地方唯一定义。
然而,我不知道作为对象存储在内存中意味着什么。我猜静态成员已经在内存中了,不管它类的对象是实例化的。为了便于您参考,作者介绍了一个例子。
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++类中意味着什么
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 生成文件"relink"意味着什么?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 在这种情况下,"typename..."意味着什么?
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- 使用typedef有什么用,它意味着什么
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 调用堆栈显示 SIGBUS,这意味着什么
- C++标准在[basic.scope.hiding]中"same scope"到底意味着什么?
- 评估对象的创建意味着什么?
- 当我们在 C++ 中说"initialize the object"时,它实际上意味着什么?
- C++这种结构"InterceptionKeyStroke &kstroke = * (InterceptionKeyStroke *) &stroke"意味着什么?
- 该语法在C 中意味着什么
- 链接标志对静态库意味着什么
- 由mpglib输出的"hip: Can't rewind stream by 74 bits"到底意味着什么?
- 这在 C# 中意味着什么以及如何使用它