我正在阅读 C++ 的参考资料,在那里我发现为了确保定义为 const 的对象的 ROMability:
1.类或结构必须没有用户定义的构造函数
2.不能有基类或成员对象用户定义的构造函数或析构函数。
我将此参考按位常量而不是可变常量。
在我看来,第一个成立是因为构造函数或析构函数修改了 const 数据成员。因此,我们避免使用用户定义的构造函数或析构函数。
但我无法很好地解释第二点。
问问题
217 次
3 回答
3
正如您所说,第一点是必要的,因为具有用户定义构造函数的对象是在运行时初始化的(在运行前的动态初始化阶段main
,如果它们具有静态生命周期),因此不能以只读方式放置内存,因为该初始化必须修改对象的内存。
第二点从第一点开始——如果(非静态)成员或基本子对象具有用户定义的构造函数,则该构造函数也必须用于在运行时初始化成员或子对象。因此,至少有一部分对象不能存储在只读存储器中;所以物体本身不可能。
于 2013-02-28T15:33:27.827 回答
3
构造函数/析构函数会修改对象,这不利于将其存储在 ROM 中。
如果类包含对象或继承了构造函数,那仍然是必须运行来构造对象的代码(成员与其父对象一起存储)。这在编译时(组装 ROM 对象时)是不可能的。
于 2013-02-28T15:30:59.463 回答
3
这看起来像POD
C++03 中的定义。 POD
表示普通的旧数据。一些编译器和平台const
可以放置一个全局实例。ROM
C++11 添加了可以映射到ROM
able 的新语言特性。 constexpr
构造函数和标准布局类型,在它们之间,可能是一些编译器可以放入的合理限制ROM
。但这将取决于编译器对ROM
ing 数据的支持。
于 2013-02-28T15:55:52.477 回答