9
在閱讀代碼時純粹爲了清晰起見,是否存在unreachable!
宏?還是它提供了任何功能優勢?使用'unreachable!`vs`panic!`是否有任何性能優勢?
在閱讀代碼時純粹爲了清晰起見,是否存在unreachable!
宏?還是它提供了任何功能優勢?使用'unreachable!`vs`panic!`是否有任何性能優勢?
是的unreachable!
macro(和unimplemented!
)純粹是爲了清晰。他們是implemented直接轉發到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"))
}
不要與unreachable
intrinsic(在穩定的鏽訪問經由unreachable
或debug_unreachable
板條箱),其不安全斷言一個分支是完全不可訪問相混淆。這樣可以在優化時將分支完全移除。如果斷言結果是錯誤的,它可能會導致未定義的行爲,而這隻會導致恐慌。