我经常听说可以禁用C ++异常系统,因为你不应该为你不使用的东西付费。如果我选择编译我的C ++程序而没有异常会导致未定义的行为吗?
答案 0 :(得分:10)
当前(及未来)的C ++标准没有关闭异常的概念。所以从技术上讲,如果你问语言律师,这样做会导致不明确的行为。实际实现尝试为这种流行的扩展定义合理的行为。请参阅您的文档。
答案 1 :(得分:3)
添加霍华德的答案。
一般的问题是,如果你把它们关掉的话,用异常编写的代码可能会突然变得错综复杂。
例如,如果无法遵守内存请求,则new
的简单调用应该throw
std::bad_alloc
异常。如果您关闭异常,它将返回0
:您确定所有对new
的调用都检查返回不是0
吗?即使是标准库或第三方库中的那些?
CLang最近推出了一个诊断,如果在禁用异常的情况下编译时使用了throw
或try
,则会阻止编译,因为这意味着代码没有正确准备,但是我不确定另一个编译器,所以要小心。