Function core::hint::unreachable_unchecked1.27.0[][src]

pub unsafe fn unreachable_unchecked() -> !
Expand description

通知编译器代码中的这一点不可访问,从而可以进行进一步的优化。

Safety

达到此函数完全是 未定义的行为 (UB)。特别是,编译器假定所有 UB 都绝不会发生,因此将消除到达 unreachable_unchecked() 调用的所有分支。

与 UB 的所有实例一样,如果这种假设被证明是错误的,即 unreachable_unchecked() 调用实际上在所有可能的控制流中都是可以到达的,则编译器将应用错误的优化策略,有时甚至可能破坏看似无关的代码,从而导致难以解决的问题 - 调试问题。

仅当您可以证明该代码永远不会调用它时,才使用此函数。 否则,请考虑使用 unreachable! 宏,该宏不允许进行优化,但是在执行时将为 panic。

Example

fn div_1(a: u32, b: u32) -> u32 {
    use std::hint::unreachable_unchecked;

    // `b.saturating_add(1)` 始终为正 (不为零),因此 `checked_div` 将永远不会返回 `None`。
    // 因此,else 分支不可访问。
    a.checked_div(b.saturating_add(1))
        .unwrap_or_else(|| unsafe { unreachable_unchecked() })
}

assert_eq!(div_1(7, 0), 7);
assert_eq!(div_1(9, 1), 4);
assert_eq!(div_1(11, u32::MAX), 0);
Run