共享相同成员的两个C++类的内存布局

memory layout of two C++ classes sharing the same members

本文关键字:C++ 两个 布局 内存 成员 共享      更新时间:2023-10-16

假设我有一个类X,它的所有非静态成员都是POD,还有一个类Y,它的成员与X的顺序相同,也是POD本身。将reinterpret_cast作为YX的实例合法吗?如果不是,它在跨平台的实践中会起作用吗?

为了给你一点背景知识,为了方便起见,我的类X将自己作为静态成员(即class X { ... public: static const X& a; static const X& b; },我想在不更改API的情况下删除静态初始化器。我的计划是创建Y类型的全局静态对象,并将reinterpret_cast类型的对象X——因为所有成员都是POD,所以我不需要运行构造函数。

假设成员的布局完全相同,并且没有引入任何继承,则可以"安全地"reinterpret_cast。我把"安全"放在引号里是有原因的,这样做似乎只是个坏主意,你说你想

在不更改API的情况下删除静态初始值设定项。我的计划是创建全局静态对象。。。

你为什么要这么做?在类中保留一组静态变量只有一个缺点,无论何时使用,都必须键入类的名称。此外,将static关键字添加到全局变量的行为与类声明中的行为不同static附加到全局变量意味着编译器将只在翻译单元的范围内使用它。这意味着您可能在不同的文件中有多个具有相同名称的全局变量。同样,这只会增加复杂性,尽管您没有具体说明为什么要这样做,但我可以放心地说,您试图实现的目标应该而且可以以更面向范围的方式解决。