当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust unreachable_unchecked用法及代码示例


本文简要介绍rust语言中 Function std::hint::unreachable_unchecked 的用法。

用法

pub const unsafe fn unreachable_unchecked() -> !

通知编译器代码中的这一点不可到达,从而实现进一步优化。

安全性

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

像所有 UB 实例一样,如果这个假设被证明是错误的,即 unreachable_unchecked() 调用在所有可能的控制流中实际上是可达的,编译器将应用错误的优化策略,有时甚至可能破坏看似无关的代码,导致difficult-to-debug 问题。

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

示例

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

    // `b.saturating_add(1)` is always positive (not zero),
    // hence `checked_div` will never return `None`.
    // Therefore, the else branch is unreachable.
    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);

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Function std::hint::unreachable_unchecked。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。