Об'єднання
Об’єднання подібні до переліків, але вам потрібно самостійно відстежувати активне поле:
#[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
.