使用"无法连接!"vs"恐慌!"是否有任何性能优势?

Joh*_*ohn 10 rust

unreachable!宏的存在纯粹是为了在阅读代码时清晰起见,还是它提供了任何功能上的优势?

ken*_*ytm 14

是的,unreachable!(unimplemented!也是)纯粹是为了清晰.它们被实现为直接转发到panic!.

#[macro_export]
#[stable(feature = "rust1", since = "1.0.0")]
macro_rules! unreachable {
    () => ({
        panic!("internal error: entered unreachable code")
    });
    ($msg:expr) => ({
        unreachable!("{}", $msg)
    });
    ($fmt:expr, $($arg:tt)*) => ({
        panic!(concat!("internal error: entered unreachable code: ", $fmt), $($arg)*)
    });
}

#[macro_export]
#[stable(feature = "rust1", since = "1.0.0")]
macro_rules! unimplemented {
    () => (panic!("not yet implemented"))
}
Run Code Online (Sandbox Code Playgroud)

不要与unreachable 内在(通过unreachabledebug_unreachable板条箱在稳定的Rust中访问)混淆,不安全地断言分支是完全无法访问的.这允许在优化时完全移除分支.如果断言结果是错误的话,它可能会导致未定义的行为,相比之下unreachable!()只会出现恐慌.

  • [unreachable_unchecked](https://doc.rust-lang.org/std/hint/fn.unreachable_unchecked.html) 现在是访问此内容的最佳方式。不再需要板条箱了。 (2认同)