联合体
联合体与枚举类似,但您需要自行跟踪活跃字段:
#[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。