联合体

联合体与枚举类似,但您需要自行跟踪活跃字段:

1. #[repr(C)]
2. union MyUnion {
3. i: u8,
4. b: bool,
5. }

7. fn main() {
8. let u = MyUnion { i: 42 };
9. println!("int: {}", unsafe { u.i });
10. println!("bool: {}", unsafe { u.b }); // Undefined behavior!
11. }

This slide should take about 5 minutes.

在 Rust 中很少需要用到联合体,因为您通常可以使用枚举。联合体只是偶尔用于 与 C 库 API 进行交互。

如果您只是想将字节重新解释为其他类型,则可能需要使用 std::mem::transmute 或 安全的封装容器,例如 zerocopy crate。