UniÔes
Unions sĂŁo como enums, mas vocĂȘ mesmo precisa rastrear o campo ativo:
#[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 }); // Comportamento indefinido! }
This slide should take about 5 minutes.
Unions raramente sĂŁo necessĂĄrias no Rust, pois geralmente vocĂȘ pode usar um enum. Elas sĂŁo ocasionalmente necessĂĄrias para interagir com as APIs da biblioteca C.
Se vocĂȘ deseja apenas reinterpretar os bytes como um tipo diferente, vocĂȘ provavelmente deveria usar std::mem::transmute
ou um wrapper seguro como o crate zerocopy
.