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