Skip to content
zig 版本:0.12.0

零位类型

在 zig 中,有一些类型是特殊的零位类型(Zero Type),它们的大小是 0 bit。

它们的特点是,涉及到它们的值不会出现在构建结果中(0 bit不占任何空间)。

void

void 是很明显的零位类型,常用于函数无返回值。

但它不止这一种用法,还可以用来初始化泛型实例,例如 std.AutoHashMap

zig
var map = std.AutoHashMap(i32, void).init(std.testing.allocator);

这样就会获得一个 i32 的 set,尽管可以使用其他方式来实现集合功能,但这样子实现效果内存占用会更少(因为相当于不存在 value)。

整数

整数 声明可以使用 u0i0 来声明零位整数类型,它们的大小也是 0 bit。

数组和切片

数组切片 的长度为 0 时,就是零位类型

另外,如果它们的元素类型是零位类型,则它们必定是零位类型,此时与数组(切片)长度无关。

枚举

只有一个值的 枚举,也是零位类型

结构体

结构体 为空或者字段均为零位类型时,此时结构体也是零位类型

例如,const zero = struct {}; 就是一个零位类型,它的大小为 0。

联合类型

仅具有一种可能类型(且该类型是零位类型)的 联合类型 也是零位类型。