共用体

共用体は enum に似ていますが、どのフィールドが有効かは自分で追跡する必要があります。

// 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 }); // 未定義動作!
}

Rust では、enum がより優れた代替手段を提供するため、共用体が必要になることはまれです。それでも C ライブラリの API とやり取りする際には、ときどき必要になります。

バイト列を別の型として再解釈したいだけであれば、おそらく std::mem::transmute または zerocopy クレートのような安全なラッパーを 使いたいはずです。