联合体(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

关键特性:

  1. 嵌入支持:可嵌入结构体作为联合体成员
  2. 内存共享:所有成员共享相同内存空间(示例中整数值与RGBA分量共享4字节)
  3. 不安全访问:成员访问必须位于 unsafe{} 代码块内
  4. 初始化方式:可通过任意成员初始化联合体

存储顺序不保证嵌入结构体的字段在内存中不一定按声明顺序排列,实际布局由编译器决定。