當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust unreachable_unchecked用法及代碼示例


本文簡要介紹rust語言中 Function core::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 core::hint::unreachable_unchecked。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。