异常规范作为函数声明中的注释

时间:2015-05-10 08:10:02

标签: c++ exception exception-specification

我在代码中使用C ++异常而不是返回值来指示错误,因此我的代码必须是异常安全的。因此,我添加了一个异常规范作为我的函数声明的注释。例如:

// Does x and y. strong-guarantee
void XandY();

// Checks something.
bool CheckSomething() noexcept;

这是好习惯吗?

此外,如果我为了制定这些规范而评估我的代码,我是否必须记住C ++异常或SEH异常,例如解除引用nullptr,溢出或除零异常?

假设我使用的是第三方库,它永远不会抛出C ++异常,但可能会抛出SEH异常。我的功能可以依赖于那个库的功能吗?

void MyFunction() noexcept // <-- Is noexcept viable?
{
    OtherFunction(); // may throw SEH exception
}

1 个答案:

答案 0 :(得分:1)

C ++异常规范仅适用于C ++异常,而不适用于Windows异常(SEH)。特别是,无法使用C ++的try-catch块捕获Windows异常。抛出Windows异常的大多数条件都被标准分类为未定义或实现定义的行为。