c++ - 动态异常规范已弃用

标签 c++ c++11

我有用于编译(和工作)的 C++ 代码,现在我收到很多警告。这是在我对 Ubuntu-Mate 进行分布式升级后发生的。

warning: dynamic exception specifications are deprecated in C++11

它发生在像这样简单的行上(在标题中):

    static Value getPriorityValue(const std::string& priorityName)
    throw(std::invalid_argument);

我收到了与此相关的 2545 条警告!无论如何告诉编译器忽略这个警告?更改代码的最简单方法是什么。

大多数错误都在第 3 方包中,因此我不想对此包进行太多修改。

我的编译器中确实有 -std=c++11 标志。

最佳答案

您应该尽可能删除或注释掉这些异常规范1,例如:

static Value getPriorityValue(const std::string& priorityName);
static Value getPriorityValue(const std::string& priorityName) /* throw(...) */;

您可以使用 -Wno-deprecated 选项关闭无法编辑代码的地方的折旧警告。我建议只在编译第三方库时使用它。如果您需要包含引发此类警告的第三方 header ,您可以执行2:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated"
#include "thirdparty.h"
#pragma GCC diagnostic pop

这应该与 gccclang 一起工作,并且只会禁用 -Wdeprecated 用于特定的包含。

1 动态异常规范从 C++11 开始被弃用,并且从 C++17 开始是非法的,所以你可能想摆脱它们并升级你的第三方库正在尽快使用。

2 如果您使用 -I 参数包含这些 header ,您可以切换到 -isystem 以禁用所有警告这些 header ,如 @Yakk - Adam Nevraumont 所述.另见 How to suppress GCC warnings from library headers? .

关于c++ - 动态异常规范已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50254641/

相关文章:

c++ - 这个场景需要调用vector的析构函数吗

c++ - 这个线程池/多核模拟有什么问题

c++ - 调试断言失败 vc\include\vector vector iterator + offset out of range in chamferMatching Opencv

c++ - 写入视频文件并同时播放

c++ - 使用 STL 将数字 vector 转换为整数

c++ - 为什么基指针只能在公共(public)继承下指向派生对象?

c++ - 最大长度的字符串类型

c++ - 同时具有模板和非模板构造函数的类

c++ - 为什么我可以在私有(private)类型上使用 auto?

c++ - 模运算符 (%) 给出不同的结果