首页 > 解决方案 > 当 noexcept 函数尝试在 gcc 或 clang 中调用 non-noexcept 函数时启用警告

问题描述

noexcept当标记为的函数尝试调用标记为的函数时,GCC 或 Clang 中是否有一个标志会引发编译时错误(或警告)noexcept

noexcept如果不是,那么当您从先前标记的功能中删除时,您应该如何判断代码的哪些部分受到影响noexcept?有没有办法?

标签: c++g++clangnoexcept

解决方案


即使被调用的函数没有被标记,标记一个函数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,因为我使用得不够多。


推荐阅读