根据当前标准,关闭C ++中的异常会导致未定义的行为吗?

时间:2011-02-20 23:52:28

标签: c++ exception

我经常听说可以禁用C ++异常系统,因为你不应该为你不使用的东西付费。如果我选择编译我的C ++程序而没有异常会导致未定义的行为吗?

2 个答案:

答案 0 :(得分:10)

当前(及未来)的C ++标准没有关闭异常的概念。所以从技术上讲,如果你问语言律师,这样做会导致不明确的行为。实际实现尝试为这种流行的扩展定义合理的行为。请参阅您的文档。

答案 1 :(得分:3)

添加霍华德的答案。

一般的问题是,如果你把它们关掉的话,用异常编写的代码可能会突然变得错综复杂。

例如,如果无法遵守内存请求,则new的简单调用应该throw std::bad_alloc异常。如果您关闭异常,它将返回0:您确定所有对new的调用都检查返回不是0吗?即使是标准库或第三方库中的那些?

CLang最近推出了一个诊断,如果在禁用异常的情况下编译时使用了throwtry,则会阻止编译,因为这意味着代码没有正确准备,但是我不确定另一个编译器,所以要小心。