为什么在 Rust 结构中只允许最后一个字段具有动态大小的类型

问题描述 投票:0回答:1

这是这个文档https://web.mit.edu/rust-lang_v1.25/arch/amd64_ubuntu1404/share/doc/rust/html/book/first-edition/unsized-types.html据说 只有结构体中的最后一个字段可以具有动态大小的类型;其他字段不得。枚举变体不得将动态大小的类型作为数据。.

在这里我无法理解这种限制背后的原因。最后一个字段有何不同?

rust rust-cargo
1个回答
0
投票

在 Rust 中,由于内存布局未指定,因此这种限制在技术上是不必要的。话虽这么说,因为编译器必须知道除一个成员之外的所有成员的大小,并且在内存中动态调整大小的成员必须是最后一个(否则它无法静态计算所有字段的偏移量),因此它与所需的内存布局一致要求 DST 字段也是代码中的最后一个。

© www.soinside.com 2019 - 2024. All rights reserved.