在更高效的C++(第15号)一书中,我发现如果启用了异常,代码将变得非常慢,即使它们未被使用。在我看来,例外是有限的使用,我尽量避免它们,但这是另一个话题。如何关闭异常处理?
我不完全理解他的说法:
- 是什么启用/禁用异常是什么意思?它是有零还是多于零的try/catch块之间的区别?它是一个编译器标志吗?如果我使用可能发生异常的DLL,会发生什么情况?
- 假设没有异常被丢进:
- 代码是否变得更慢作为一个整体或者是只有当程序进入零件/退出try/catch块变慢?据作者说,两者都是事实。
- 我该如何编译没有例外?我可以做到这一点,即使我有try/catch块吗?如果我使用的DLL可能会引发异常,我可以这样做吗?
这本书很旧,编译器从此变得更聪明。今天体面的一个可以做到零开销,使用指令地址的基于表的查找来查找堆栈解开时需要运行的代码。但是,如果您想要了解它,然后查看编译器选项,大多数都可以选择禁用该功能。 –
“在我看来,例外是有限的使用,我尽量避免它们,但这是另一个话题。”我的猜测是你的代码不会调用任何可能的系统调用。你正在编程CPU加热器吗? – 2016-03-08 18:22:17
@ user4590120:异常并不是处理故障的唯一方法。我使用返回代码来检查成功或失败。 – Fabian