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")
}
}
RunIterators:
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