联合体

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

#[repr(C)]
union MyUnion {
    i: u8,
    b: bool,
}

fn main() {
    let u = MyUnion { i: 42 };
    println!("int: {}", unsafe { u.i });
    println!("bool: {}", unsafe { u.b }); // Undefined behavior!
}
This slide should take about 5 minutes.

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

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