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

标签 c++ casting

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

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/

相关文章:

Java float 到 long 显式转换

C++:array1 = array2 vs使用循环将array2的值分配给array1

c++ - 在 C++ 中绑定(bind)多个引用的临时对象的生命周期

c++ - LuaJIT lib 使用/MD 构建但不会导致运行时库与/MDd 程序不匹配?

Java 函数参数中的隐式转换

c# - 从基类强制转换为继承类时,InvalidCastException?

C++ 条件语句

python - C++ 中用户定义类的动态分配,都具有相同的公共(public)函数

为 int 和 int 转换为 float

json - 在 Postgresql 中将文本类型列转换为 json 类型