考虑以下因素:
struct B { int x; }
struct D { B b; int y; }
void main() {
auto b = cast(B*) new D();
writeln(b.x == b.x);
auto d = cast(D*) b;
writeln(b.x == d.b.x);
}
这个程序能保证写两次“true”吗?我在 D 语言引用中找不到这些规则。
最佳答案
D 中的结构“像 C 中一样工作”,因此您可以对其内部布局有合理的期望。警惕hidden members of nested structs不过。
从 D
转换到 B
应该没问题。向另一个方向进行转换并不安全,因为 y
将引用原始 B
变量之后的内容。
从 D*
转换为 B*
的一种更简单、安全的方法是获取 D.b
的地址 (B* b = &d.b
).
关于pointers - 如果 D 包含类型 B 的对象作为其第一个成员,则在 B* 和 D* 之间进行转换是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28362315/