繁体   English   中英

为什么类或结构必须没有用户定义的构造函数或析构函数来确保C ++中const的可ROM性?

[英]Why should a class or struct must have no user defined constructor or destructor to ensure ROMability for const in C++?

我正在阅读关于C ++的参考资料,在那里我发现为了确保定义为const的对象的可ROM性:
1.类或结构必须没有用户定义的构造函数
2.可以没有用户定义的构造函数或析构函数的基类或成员对象。
我参考了bitwise const而不是mutable const。
在我的视图中,第一个是成立的,因为构造函数或析构函数修改了const数据成员。 因此,我们不使用用户定义的构造函数或析构函数。
但我无法对第二点做出很好的解释。

构造函数/析构函数会修改对象,而对象存储在ROM中。

如果类包含对象或继承构造函数,那么仍然是必须运行以构造对象的代码(成员与其父对象一起存储)。 这在编译时是不可能的(当组装ROM对象时)。

如你所说,第一点是必要的,因为具有用户定义的构造函数的对象在运行时初始化(在运行main之前的动态初始化阶段,如果它们具有静态生存期),因此不能放在读取中 -只有内存,因为初始化必须修改对象的内存。

第二点从第一点开始 - 如果(非静态)成员或基础子对象具有用户定义的构造函数,则该构造函数也必须用于在运行时初始化成员或子对象。 因此,至少部分对象不能存储在只读存储器中; 所以对象本身不可能。

这看起来像C ++ 03中POD的定义。 POD意味着普通的旧数据。 一个const全局实例可以由一些编译器和平台放在ROM

C ++ 11添加了可以映射到ROM新语言功能。 constexpr构造函数和它们之间的标准布局类型可能是对某些编译器可以放入ROM一组合理限制。 但这取决于编译器对ROM数据的支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM