本文簡要介紹rust語言中 Macro std::debug_assert
的用法。
用法
macro_rules! debug_assert {
($($arg : tt) *) => { ... };
}
在運行時斷言布爾表達式是true
。
如果在運行時無法將提供的表達式計算為 true
,這將調用 panic!
宏。
與 assert!
一樣,此宏也有第二個版本,可以提供自定義緊急消息。
用途
與 assert!
不同,默認情況下 debug_assert!
語句僅在非優化構建中啟用。除非將 -C debug-assertions
傳遞給編譯器,否則優化的構建將不會執行 debug_assert!
語句。這使得debug_assert!
對於那些成本太高而無法在發布版本中出現但在開發過程中可能會有所幫助的檢查很有用。擴展debug_assert!
的結果總是類型檢查。
未經檢查的斷言允許處於不一致狀態的程序繼續運行,這可能會產生意想不到的後果,但不會引入不安全性,隻要這僅發生在安全代碼中即可。然而,斷言的性能成本通常是不可測量的。因此,僅在徹底分析後才鼓勵將 assert!
替換為 debug_assert!
,更重要的是,僅在安全代碼中!
例子
// the panic message for these assertions is the stringified value of the
// expression given.
debug_assert!(true);
fn some_expensive_computation() -> bool { true } // a very simple function
debug_assert!(some_expensive_computation());
// assert with a custom message
let x = true;
debug_assert!(x, "x wasn't true!");
let a = 3; let b = 27;
debug_assert!(a + b == 30, "a = {}, b = {}", a, b);
相關用法
- Rust debug_assert用法及代碼示例
- Rust debug_assert_eq用法及代碼示例
- Rust debug_assert_ne用法及代碼示例
- Rust debug_assert_matches用法及代碼示例
- Rust default用法及代碼示例
- Rust decode_utf16用法及代碼示例
- Rust drop_in_place用法及代碼示例
- Rust drop用法及代碼示例
- Rust discriminant用法及代碼示例
- Rust dbg用法及代碼示例
- Rust UdpSocket.set_multicast_loop_v6用法及代碼示例
- Rust i64.overflowing_add_unsigned用法及代碼示例
- Rust Box.downcast用法及代碼示例
- Rust BTreeMap.last_key_value用法及代碼示例
- Rust str.make_ascii_uppercase用法及代碼示例
- Rust u128.checked_pow用法及代碼示例
- Rust usize.wrapping_mul用法及代碼示例
- Rust AtomicU8.fetch_sub用法及代碼示例
- Rust PanicInfo.payload用法及代碼示例
- Rust MaybeUninit.assume_init_mut用法及代碼示例
- Rust String.try_reserve用法及代碼示例
- Rust Mutex.new用法及代碼示例
- Rust f32.exp用法及代碼示例
- Rust Result.unwrap_or_else用法及代碼示例
- Rust slice.sort_unstable_by_key用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Macro std::debug_assert。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。