【问题标题】:Enabling warnings when a noexcept function attempts to call non-noexcept function in gcc or clang当 noexcept 函数尝试在 gcc 或 clang 中调用 non-noexcept 函数时启用警告
【发布时间】:2020-04-27 19:06:04
【问题描述】:

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

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

【问题讨论】:

  • “当你从以前标记为 noexcept 的函数中删除 noexcept 时,你应该如何判断代码的哪些部分受到影响?” - 您非常仔细地审核您的代码。

标签: c++ g++ clang noexcept


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 2015-01-07
    • 2018-03-29
    • 2023-03-05
    • 2020-06-26
    • 2015-06-11
    • 2013-03-21
    相关资源
    最近更新 更多