注意: 当目标为 C++11 或更新版本且 Boost 1.75 或更新版本可用时,建议使用 Boost LEAF 而不是 Boost Exception。 LEAF 的用途相似,但它具有更优雅的接口,效率更高,并且可以在有或没有异常处理的情况下工作——但它理解 Boost Exception 错误信息,以便与遗留源代码兼容。 此概述解释了两个 API 之间的差异(Boost Exception 未被弃用,并将继续得到支持,包括 C++03 兼容性)。
Boost Exception 的目的是简化异常类层次结构的设计,并帮助编写异常处理和错误报告代码。
它支持将任意数据传输到捕获点,这在其他情况下很棘手,因为异常类型有 no-throw 要求 (15.5.1)。 数据可以添加到任何异常对象,可以直接在 throw 表达式 (15.1) 中添加,也可以稍后在异常对象向调用堆栈上传播时添加。
在异常对象传递给 throw 后,能够向其添加数据非常重要,因为通常处理异常所需的一些信息在检测到故障的上下文中是不可用的。
Boost Exception 还支持 N2179 风格的 复制 异常对象,通过 boost:: throw_exception 函数以非侵入性和自动方式实现。
感谢 Peter Dimov 的持续帮助。 还要感谢 Tobias Schwinger、Tom Brinkman、Pavel Vozenilek 以及所有参与评审过程的人。