chapter on unsized types in the first edition book说:

只有 struct 中的最后一个字段可以具有动态大小的类型;其他字段不能.Enum变体不能具有动态大小的类型作为数据.

在这里我无法理解这种限制背后的原因.最后一个领域有什么不同?

推荐答案

在Rust中,由于内存布局未指定,因此动态大小类型(DST)字段位于最后的限制在技术上并不必要.话虽如此,编译器必须知道除一个字段之外的所有字段的大小,并且在内存中动态大小的字段必须是最后的,否则它无法静态计算所有字段的偏差.

因此,要求DST位于代码中的最后与所需的内存布局一致.

Rust相关问答推荐

通过不同的字段进行散列和排序的 struct (需要不同的EQ实现)

用 rust 蚀中的future 展望 struct 的future

如何使用RefCell::JOYMOMTborrow 对 struct 不同字段的可变引用

将serde_json读入`VEC<;T&>;`( rust 色)时出现问题

在Rust内联程序集中使用字符串常量

Rust 中什么时候可以返回函数生成的字符串切片&str?

在 Rust 中,在需要引用 self 的 struct 体方法中使用闭包作为 while 循环条件

如何使用 Bincode 在 Rust 中序列化 Enum,同时保留 Enum 判别式而不是索引?

Option<&T> 如何实现复制

‘&T as *const T as *mut T’ 在 ‘static mut’ 项目中合适吗?

如何使用 Rust Governor 为每 10 秒 10 个请求创建一个 RateLimiter?

使用自定义 struct 收集 Vec

产生拥有值的迭代器的 Rust 可变borrow 在循环中失败

如何在 Rust 中将 UTF-8 十六进制值转换为 char?

我可以在不调用 .clone() 的情况下在类型转换期间重用 struct 字段吗?

Rust - 在线程之间不安全地共享没有互斥量的可变数据

如何从 many0 传播 Nom 失败上下文?

BigUint 二进制补码

如何在没有 `make_contiguous()` 的情况下对 VecDeque 进行排序或反转?

如何在 Rust 中构建一个 str