联合体(Unions)
基本用法
联合体支持嵌入特性,类似结构体:
struct Rgba32_Component {
r u8
g u8
b u8
a u8
}
union Rgba32 {
Rgba32_Component // 嵌入结构体
value u32 // 整数值
}
// 通过整数值初始化
clr1 := Rgba32{
value: 0x008811FF
}
// 通过嵌入结构体初始化
clr2 := Rgba32{
Rgba32_Component: Rgba32_Component{
a: 128
}
}
// 获取联合体大小
sz := sizeof(Rgba32)
unsafe {
// 必须在不安全块中访问成员
println('Size: ${sz}B, clr1.b: ${clr1.b}, clr2.b: ${clr2.b}')
}
// 输出:Size: 4B, clr1.b: 136, clr2.b: 0
关键特性:
- 嵌入支持:可嵌入结构体作为联合体成员
- 内存共享:所有成员共享相同内存空间(示例中整数值与RGBA分量共享4字节)
- 不安全访问:成员访问必须位于
unsafe{}
代码块内 - 初始化方式:可通过任意成员初始化联合体
存储顺序不保证嵌入结构体的字段在内存中不一定按声明顺序排列,实际布局由编译器决定。