假设我有一个类X
,使其所有非静态成员都是POD,并且类Y
具有与X
相同顺序的相同成员,并且是也是POD本身。 reinterpret_cast
到Y
的实例X
是否合法?如果不是,它会在跨平台的实践中发挥作用吗?
为了给你一些背景知识,为了方便起见,我的班级X
将自己作为静态成员(即class X { ... public: static const X& a; static const X& b; }
,我想删除静态初始化程序而不更改API。我的计划是创建Y
类型的全局静态对象和reinterpret_cast
到X
- 因为所有成员都是POD,所以我不需要运行构造函数。
答案 0 :(得分:1)
假设成员的布局完全相同,并且您没有引入任何继承,您可以“安全地”reinterpret_cast
。我把“安全”放在引号中是有原因的,这样做似乎只是一个坏主意,你说你想要
...删除静态初始值设定项而不更改API。我的计划是创建全局静态对象......
你为什么要这样做?在类中保留一组静态变量只有一个缺点,您必须在使用它时键入类的名称。 同时将static
关键字添加到全局变量中的行为与类声明中的行为不同。 static
当附加到全局变量时意味着编译器将仅使用它在翻译单位的范围内。这意味着您可能在单独的文件中具有多个具有相同名称的全局变量。同样这只会增加复杂性,虽然你没有说明你为什么要这么做,但我可以肯定地说,你想要完成的事情应该并且可以以更加范围导向的方式解决。