本文简要介绍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 unreachable_unchecked用法及代码示例
- Rust unreachable用法及代码示例
- Rust unimplemented用法及代码示例
- Rust unit用法及代码示例
- Rust u128.checked_pow用法及代码示例
- Rust usize.wrapping_mul用法及代码示例
- Rust u8.rotate_left用法及代码示例
- Rust u64.rotate_right用法及代码示例
- Rust u16.saturating_add用法及代码示例
- Rust u128.borrowing_sub用法及代码示例
- Rust u64.overflowing_mul用法及代码示例
- Rust usize.wrapping_neg用法及代码示例
- Rust u32.saturating_sub用法及代码示例
- Rust u32.unstable_next_multiple_of用法及代码示例
- Rust u8.pow用法及代码示例
- Rust u128.to_be用法及代码示例
- Rust u32.wrapping_pow用法及代码示例
- Rust u64.log用法及代码示例
- Rust u32.checked_neg用法及代码示例
- Rust usize.checked_div用法及代码示例
- Rust u64.overflowing_sub用法及代码示例
- Rust u16.rem_euclid用法及代码示例
- Rust u32.overflowing_add用法及代码示例
- Rust usize.saturating_pow用法及代码示例
- Rust u8.is_ascii_whitespace用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Function core::hint::unreachable_unchecked。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。