2017-05-30 84 views

回答

13

是的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")) 
} 

不要與unreachableintrinsic(在穩定的鏽訪問經由unreachabledebug_unreachable板條箱),其不安全斷言一個分支是完全不可訪問相混淆。這樣可以在優化時將分支完全移除。如果斷言結果是錯誤的,它可能會導致未定義的行爲,而這隻會導致恐慌。

相關問題