c++ - 当 noexcept 函数尝试在 gcc 或 clang 中调用非 noexcept 函数时启用警告

标签 c++ g++ clang 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,因为我用得不够。

关于c++ - 当 noexcept 函数尝试在 gcc 或 clang 中调用非 noexcept 函数时启用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59676462/

相关文章:

c++ - 扫描线多边形填充算法

c++ - llvm/clang 自身重新编译

c++ - 如何在 clang 中选择特定的 gcc-toolchain?

c++ - 错误: reference to ‘int64’ is ambiguous Compiling problem opencv + dlib in QT

使用命名空间时,C++ 模板函数无法使用 g++ 进行编译

c++ - 对 `typeinfo and ' vtable 的 undefined reference

objective-c - 使用 Clang 和 GNUstep 在 Debian 8 GNU/Linux 上编译 Objective-C

c++ - 在 C++ 中使用 MergeSort 排序文件

c++ - 沙盒插件架构

c++ - Linux 上的托管构建