Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Объединения

Объединения похожи на перечисления, но активное поле нужно отслеживать самостоятельно:

// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

#[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.