Macro std::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