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

时间:2016-04-11 22:32:48

标签: c++

假设我有一个类X,使其所有非静态成员都是POD,并且类Y具有与X相同顺序的相同成员,并且是也是POD本身。 reinterpret_castY的实例X是否合法?如果不是,它会在跨平台的实践中发挥作用吗?

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

1 个答案:

答案 0 :(得分:1)

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

  

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

你为什么要这样做?在类中保留一组静态变量只有一个缺点,您必须在使用它时键入类的名称。 同时将static关键字添加到全局变量中的行为与类声明中的行为不同。 static当附加到全局变量时意味着编译器将仅使用它在翻译单位的范围内。这意味着您可能在单独的文件中具有多个具有相同名称的全局变量。同样这只会增加复杂性,虽然你没有说明你为什么要这么做,但我可以肯定地说,你想要完成的事情应该并且可以以更加范围导向的方式解决。