c++ - 当 noexcept 函数尝试在 gcc 或 clang 中调用 non-noexcept 函数时启用警告
问题描述
noexcept
当标记为的函数尝试调用未标记为的函数时,GCC 或 Clang 中是否有一个标志会引发编译时错误(或警告)noexcept
?
noexcept
如果不是,那么当您从先前标记的功能中删除时,您应该如何判断代码的哪些部分受到影响noexcept
?有没有办法?
解决方案
即使被调用的函数没有被标记,标记一个函数noexcept
也是有意义的。举一个简单的例子,比如平方根,如果你传递一个负数,它可能会抛出。在确保仅使用正数调用的函数中使用它时,您可以标记它。如果你捕捉到异常,同样成立。
也就是说,拥有一个标记可疑呼叫的工具是有意义的。我知道 clang 有一个编译器警告,用于抛出一个 noexcept 函数(直接)。(请参阅https://clang.llvm.org/docs/DiagnosticsReference.html#wexceptions)对于我在 constexpr 中工作的自定义断言宏,我已经抑制了它,MSVC 也可以。
对于间接情况,也就是调用未标记的函数,我还没有看到编译器警告。我知道 clangd 报告了这个,很可能是因为 clang-tidy。快速检查它的页面让我相信它是以下检查:https ://clang.llvm.org/extra/clang-tidy/checks/bugprone-exception-escape.html
我不能告诉 GCC,因为我使用得不够多。
推荐阅读
- apache - 如何将 apache/nginx 配置为代理和重写?
- javascript - 表单组件名称在反应 js 中的 antd 中更新
- javascript - 单击按钮时显示 jquery 数据表模式对话框不起作用
- bioinformatics - Snakemake 无法将正常运行的符号链接识别为输出并删除部分但不是全部输出
- python - 编辑文件上的数据并将其保存为新文件而不是覆盖它
- java - 手动启动和停止 InboundChannelAdapter
- mysql - 如何查询没有特定活动的用户?
- reactjs - 使用从扩展运算符复制的对象时,setState 不起作用
- python - 如何在 Python 中遍历具有多个子键的 JSON 文件?
- java - 我如何通过 Spring Boot 调用具有子报告的 jasper?