gpt4 book ai didi

c++ - 在不相关的全等类之间进行转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:41 27 4
gpt4 key购买 nike

假设我有两个类,它们具有来自两个不同库的相同成员:

namespace A {
struct Point3D {
float x,y,z;
};
}

namespace B {
struct Point3D {
float x,y,z;
};
}

当我尝试交叉转换时,它成功了:

A::Point3D pa = {3,4,5};
B::Point3D* pb = (B::Point3D*)&pa;
cout << pb->x << " " << pb->y << " " << pb->z << endl;

这在什么情况下保证有效?总是?请注意,编辑外部库以添加对齐编译指示或类似内容是非常不可取的。我在 Ubuntu 8.10 上使用 g++ 4.3.2。

最佳答案

如果您使用的结构只是数据并且没有使用继承,我认为它应该始终有效。

只要是 POD 就应该没问题。 http://en.wikipedia.org/wiki/Plain_old_data_structures

按照标准(1.8.5)

“除非它是一个位域(9.6),一个最派生的对象应该有一个非零的大小并且应该占据一个或多个字节贮存。基类子对象的大小可能为零。 POD5的一个对象)类型 (3.9) 应占用的连续字节存储。”

如果它们占用连续的存储字节并且它们是具有不同名称的相同结构,则转换应该成功

关于c++ - 在不相关的全等类之间进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260040/

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