【发布时间】:2011-06-01 00:20:56
【问题描述】:
我正在考虑在我的应用程序中使用 boost 异常处理。采用 boost 异常处理的主要好处是我可以将元数据添加到异常中。这可以简化调试并允许在异常堆栈展开时向上传播更多信息。但是,我不清楚这对性能的影响。如何实现 boost 异常处理 - error_info 对象是否存储在内部映射中(每次插入时都插入 log(n))!提升异常处理的任何已知缺点!
【问题讨论】:
-
我会猜测与实际(重新)抛出 C++ 异常的开销相比,任何可能完成的地图插入或其他元数据处理都将相形见绌。
-
例外应该是例外的(对不起重言式)。异常处理开销应仅在没有发生异常的情况下考虑。处理 throw 异常的开销应该是无关紧要的。如果不是这种情况,则表明设计错误。
-
@atzz:这很重要,如果我抛出一个异常,我今天要捕获什么,而不是明天。
-
@ybungalobill - 我们不要为了争论而争论。如果您不同意我的意见,请以允许建设性讨论的形式重新表述您的意见。
-
@ybungalobill - 我假设软件工程师是理智的人,不会故意添加悲观情绪。把这个排除在外,记住没有什么是免费的。优化通常在开发中花费很多,在维护中花费更多。我认为异常处理不是关注性能的地方;最好保持简洁易读。异常很少发生,因此您不会在整体性能上获得任何收益。 OTOH,异常处理代码在产品演化和维护过程中非常频繁地成为焦点,因此可读性在这里付出了代价。
标签: c++ debugging boost exception-handling