Macro std::unreachable

1.0.0 · source ·
macro_rules! unreachable {
    ($($arg:tt)*) => { ... };
}
Expand description

表示无法访问的代码。

每当编译器无法确定某些代码不可访问时,此功能就很有用。例如:

  • 让分支与守卫条件匹配。
  • 动态终止的循环。
  • 动态终止的迭代器。

如果确定代码不可访问不正确,则程序立即以 panic! 终止。

unreachable_unchecked 函数是该宏中不安全的副本,如果到达代码,它将导致未定义的行为。

Panics

这将始终为 panic!,因为 unreachable! 只是 panic! 的简写,带有固定的、特定的消息。

panic! 一样,此宏具有用于显示自定义值的第二种形式。

Examples

match 分支:

fn foo(x: Option<i32>) {
    match x {
        Some(n) if n >= 0 => println!("Some(Non-negative)"),
        Some(n) if n <  0 => println!("Some(Negative)"),
        Some(_)           => unreachable!(), // 如果注释掉,就会编译错误
        None              => println!("None")
    }
}
Run

Iterators:

fn divide_by_three(x: u32) -> u32 { // x/3 最差的实现之一
    for i in 0.. {
        if 3*i < i { panic!("u32 overflow"); }
        if x < 3*i { return i-1; }
    }
    unreachable!("The loop should always return");
}
Run