1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-06-07 10:06:22 +02:00

29 lines
717 B
Markdown
Raw Normal View History

2022-12-21 16:36:30 +01:00
# Unions
Unions are like enums, but you need to track the active field yourself:
```rust,editable
#[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 }); // Undefined behavior!
}
```
2023-01-17 16:35:54 +00:00
<details>
Unions are very rarely needed in Rust as you can usually use an enum. They are occasionally needed
for interacting with C library APIs.
If you just want to reinterpret bytes as a different type, you probably want
[`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn.transmute.html) or a safe
wrapper such as the [`zerocopy`](https://crates.io/crates/zerocopy) crate.
</details>