【问题标题】:Where did `throw(...)` syntax come from?`throw(...)` 语法从何而来?
【发布时间】:2012-10-17 18:16:39
【问题描述】:

在我们的应用程序中,我们有一些(成员,但这无关紧要)函数声明为

void SomeFunction(Type argument) throw (...);

使用编译得很好的 Microsoft Visual C++。但现在我正在尝试用 GCC 编译它,它拒绝 ... 作为语法错误。我记得很久以前就听说过这个构造,但是看看规范,C++03 和 C++11 似乎都不允许... 在那里,我不记得我从哪里得到它。有人知道这个(显然毫无意义的)构造的起源吗?

【问题讨论】:

  • 我不知道他们为什么支持它,但大概选择了语法来反映catch(...) 语法;一个意思是“可以抓住任何东西”,另一个意思是“可以扔任何东西”
  • 我认为我们都应该责备小组中的 Java 粉丝。
  • 为什么这被选为题外话?这怎么可能远程跑题了?
  • 另请注意,C++11 不赞成在函数声明中使用 throw 表示法。
  • @WhozCraig:Java 出现在 C++ 已经存在之后(尽管在完全标准化之前)。

标签: c++ history


【解决方案1】:

来自http://msdn.microsoft.com/en-us/library/wfa0edys(v=vs.80).aspx的文章:

“Visual C++ 在其实现中背离了 ANSI 标准 异常规范。”

【讨论】:

  • 我总是开玩笑地将遵循规范的 gcc 方法称为“规范纳粹”(特别是当规范过度限制时),但我真的,真的,真的更喜欢它而不是 MSVC 无偿扩展。
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 2016-05-02
  • 2014-06-05
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多