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