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

标签 c++ exception exception-specification

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

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

// Checks something.
bool CheckSomething() noexcept;

这是好的做法吗?

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

假设我使用一个从不抛出 C++ 异常但可能抛出 SEH 异常的第 3 方库。我的函数(依赖于该库的函数)可以是 noexcept 吗?

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

最佳答案

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

关于c++ - 异常规范作为函数声明中的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30149149/

相关文章:

c++ - 制作时钟/计时器类时出现异常错误

java - 不抛出异常类型处理时出现问题 - 想要一个更通用的多捕获版本

c++ - 通过 vs code 远程调试 arm 板时 Pretty-printer 不工作

c++ - 写入文件 - 无效问题

c++ - 使用可变参数模板指定友元类

c++ - 为什么资源管理顺序很重要?

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

c++ - 过渡到使用 noexcept 隐式声明析构函数的 C++11

c++ - std::runtime_error::runtime_error(const std::string&) 如何满足 std::exception 对 throw() 的要求?

c++ - 为什么在编译时不检查 C++ 异常规范?