共用体
共用体は 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 クレートのような安全なラッパーを 使いたいはずです。