Function core::hint::unreachable_unchecked 1.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