gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:29:03 25 4
gpt4 key购买 nike

假设我有一个类 X这样它的所有非静态成员都是 POD 和一个类 Y具有与 X 相同顺序的相同成员, 也是 POD 本身。 reinterpret_cast合法吗Y 的实例至 X ?如果不是,它会跨平台实践吗?

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

最佳答案

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

...remove static initializers without changing the API. My plan was to create global static objects...

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

关于c++ - 共享相同成员的两个 C++ 类的内存布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36560468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com