sha*_*oth 18 c++ exception-handling exception
Visual C++有一个编译器设置"启用C++异常",可以设置为"否".如果我这样设置会发生什么?我的代码从不显式抛出或捕获异常(因此第一个抛出的异常将终止程序)并且不依赖于堆栈展开 - 我是否应该从重新编译的程序中得到更多不受欢迎的行为?
bee*_*f2k 15
该设置的MSDN文档解释了不同的异常模式,甚至提供了代码示例来显示不同模式之间的差异.此外,这篇文章可能很有趣,尽管它已经很老了.
底线:该选项基本上启用或禁用跟踪所有对象的生命周期.这种跟踪是必需的,因为在异常的情况下,需要调用所有正确的析构函数,必须展开堆栈,并进行大量的清理工作.这种跟踪需要组织开销(=附加代码) - 可以通过将选项设置为"否"来删除.
我没有亲自试过,但看起来你仍然可以throw和catch例外,如果选项设置为"否",但缺少清理和退绕,这可能会产生非常糟糕的后果(不推荐;)..
当 C++ 对象由于异常而超出范围时,编译器将省略析构函数和其他堆栈展开代码,这些代码会在 C++ 对象之后进行清理。
换句话说,它省去了一堆清理代码。这将显着提高性能,但如果确实抛出异常,也会导致严重的后果。(如果你不相信我,你自己计时。)
性能差异并不是禁用异常的真正原因,除非在某些关键应用程序中您绝对有义务这样做。
| 归档时间: |
|
| 查看次数: |
10749 次 |
| 最近记录: |