【发布时间】:2018-05-09 13:28:56
【问题描述】:
我有用于编译(和工作)的 C++ 代码,现在我收到很多警告。这发生在我对 Ubuntu-Mate 进行了 dist 升级之后。
警告:动态异常规范在 C++11 中已弃用
它发生在像这样简单的行上(在标题中):
static Value getPriorityValue(const std::string& priorityName)
throw(std::invalid_argument);
我收到了与此相关的 2545 警告!有没有办法告诉编译器忽略这个警告?更改代码的最简单方法是什么。
大部分错误都在第 3 方包中,所以我不想对这个包做太多修改。
我的编译器中确实有 -std=c++11 标志。
【问题讨论】:
-
修复它的最简单方法是从函数声明中删除
throw(std::invalid_argument)(因为编译器告诉你它们已被弃用)。此外,警告与错误不同 -
我认为您应该编辑您的问题,因为它们实际上不是错误,而只是警告。
-
你可以用
#define throw(X) noexcept(false)编译...(这是个玩笑,不要这样做) -
@YSC 这可能会破坏所有抛出异常的代码。
-
不推荐使用动态异常规范。这是来自标准委员会的警告,他们可能在标准的未来版本中被删除。与此同时,他们是合法的,他们的行为是明确的。大多数编译器都有关闭特定警告的机制,这就是你应该使用的。如果你从这段代码中得到错误(即编译器拒绝编译它),那么你的编译器不符合语言定义。