不可达 (unreachable)

unreachable 是一个断言,表示控制流永远不会到达该位置。

语义

  • Debug / ReleaseSafe: 编译器会发出 panic(运行时安全检查失败)。
  • ReleaseFast / ReleaseSmall: 编译器会根据此信息进行优化。如果程序在运行时实际上到达了 unreachable,则通过未定义行为(Undefined Behavior)处理。

示例

const std = @import("std");

fn asciiToUpper(x: u8) u8 {
    return switch (x) {
        'a'...'z' => x + 'A' - 'a',
        'A'...'Z' => x,
        else => unreachable,
    };
}

test "unreachable switch" {
    try std.testing.expect(asciiToUpper('a') == 'A');
    try std.testing.expect(asciiToUpper('A') == 'A');
}

在上面的例子中,如果将非字母字符传递给 asciiToUpper,在安全构建模式下会引发 panic,而在不安全构建模式下则是未定义行为。

作为类型

unreachable 也可以作为表达式的类型,这与 noreturn 兼容。