Macro core::debug_assert
1.0.0 · source · macro_rules! debug_assert { ($($arg:tt)*) => { ... }; }
Expand description
声明在运行时布尔表达式为 true
。
如果提供的表达式在运行时无法评估为 true
,则将调用 panic!
宏。
像 assert!
一样,此宏还具有第二个版本,可以在其中提供自定义 panic 消息。
Uses
与 assert!
不同,默认情况下仅在未优化的构建中启用 debug_assert!
语句。
除非将 -C debug-assertions
传递给编译器,否则优化的构建将不执行 debug_assert!
语句。
这使 debug_assert!
对于检查成本太高而无法在发行版本中进行检查,但在开发过程中可能很有用。
扩展 debug_assert!
的结果始终是类型检查的。
未检查的断言允许处于不一致状态的程序继续运行,这可能会带来意想不到的后果,但不会引入不安全性,只要这种不安全性仅在安全代码中发生即可。
但是,断言的性能成本通常无法衡量。
因此,仅在经过全面分析后才鼓励使用 debug_assert!
替换 assert!
,更重要的是,仅使用安全代码!
Examples
// 这些断言的 panic 消息是给定表达式的字符串化值。
debug_assert!(true);
fn some_expensive_computation() -> bool { true } // 一个非常简单的函数
debug_assert!(some_expensive_computation());
// 使用自定义消息进行断言
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);
Run