2

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

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

// Checks something.
bool CheckSomething() noexcept;

这是好习惯吗?

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

假设我使用了一个 3rd-party 库,它永远不会抛出 C++ 异常,但可能会抛出 SEH 异常。我的函数,它依赖于那个库的函数,可以永远是 noexcept 吗?

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

1 回答 1

1

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

于 2015-05-10T10:08:32.243 回答