联合体 Union
联合体主要用于与 C 语言交互和极端性能优化,在安全 Rust 中很少使用。
语法:
rust
union name{
item1: type1,
item2: type2,
item3: type3,
}使用union关键字声明一个联合体,每个元素之间使用逗号隔开,最后一行的逗号可保留。每个元素使用item: type格式指明类型。
联合体的特点在于,内部所有变体同时只能使用一个,并且它们共享内存。
比如现在创建一个联合体,让它可以在i32和f32之间自由切换:
rust
union IntOrFloat {
i: i32,
f: f32,
}此时访问 IntOrFloat.i就是以整形访问,IntOrFloat.f就是以浮点型访问。
必须把union放到unsafe { }内部处理:
rust
let mut u = IntOrFloat { i: 42 };
unsafe {
println!("作为整数: {}", u.i);
u.f = 3.14;
println!("作为浮点数: {}", u.f); // 未定义行为!
}联合体在同一内存位置存储不同类型的值,每次只能安全访问当前活跃的字段。因为联合体没有手段去判断当前存储了哪一个变体,这就可能导致一些错误发生,所以要放到unsafe内部处理。
Rust本身其实并不常用这种类型,只是为了兼容C语言才推出的联合体,此处就不深入讲解了。
