零位类型
在 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)。
整数
整数 声明可以使用 u0
和 i0
来声明零位整数类型,它们的大小也是 0 bit。
数组和切片
另外,如果它们的元素类型是零位类型,则它们必定是零位类型,此时与数组(切片)长度无关。
枚举
只有一个值的 枚举,也是零位类型。
结构体
结构体 为空或者字段均为零位类型时,此时结构体也是零位类型。
例如,const zero = struct {};
就是一个零位类型,它的大小为 0。
联合类型
仅具有一种可能类型(且该类型是零位类型)的 联合类型 也是零位类型。