Об’єднання
Об’єднання подібні до переліків, але вам потрібно самостійно відстежувати активне поле:
#[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 }); // Невизначена поведінка!
}
This slide should take about 5 minutes.
Об’єднання дуже рідко потрібні в Rust, оскільки зазвичай можна використовувати перелік. Іноді вони потрібні для взаємодії з API бібліотек C.
Якщо ви просто хочете по-новому інтерпретувати байти як інший тип, вам, мабуть, знадобиться std::mem::transmute або безпечна оболонка, як-от крейт zerocopy.