请考虑以下事项:
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语言参考中找不到这些规则。
答案 0 :(得分:4)
D&#34中的结构;就像在C"中那样工作,因此您可以对其内部布局有合理的期望。但是要警惕hidden members of nested structs。
从D
投射到B
应该没问题。从另一个方向投射是不安全的,因为y
将引用原始B
变量之后的内容。
从D*
投射到B*
的更简单,更安全的方法是使用D.b
的地址(B* b = &d.b
)。