联合体

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

  1. #[repr(C)]
  2. union MyUnion {
  3. i: u8,
  4. b: bool,
  5. }
  6. fn main() {
  7. let u = MyUnion { i: 42 };
  8. println!("int: {}", unsafe { u.i });
  9. println!("bool: {}", unsafe { u.b }); // Undefined behavior!
  10. }

This slide should take about 5 minutes.

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

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