【问题标题】:VC++ 2008/2010: is throw() or __declspec(nothrow) a better choice?VC++ 2008/2010:throw() 或 __declspec(nothrow) 是更好的选择吗?
【发布时间】:2012-02-20 20:14:22
【问题描述】:

在使用 VC++ 2008 和 2010 时,使用哪个标记更好地指示函数不会引发异常:

  • throw()(C++ 标准)
  • __declspec(nothrow)(MS 扩展)

我阅读了一些较早的论坛讨论,其中人们说使用throw() 实际上可能会强制编译器生成额外的代码来捕获异常,以防函数抛出(针对标记)。他们的建议是不要使用throw(),而是使用__declspec(nothrow),因为编译器实际上可以使用它进行优化。

我进行了一些搜索,但找不到真正有用的结果。据我了解,Boost 库建议不要使用它们here__declspec(nothrow) 是非标准 C++,因此如果 MS 实现异常规范,它会继续以相同的方式工作,而 throw() 的行为可能会发生变化。

【问题讨论】:

标签: visual-c++ exception throw declspec


【解决方案1】:

标准格式是noexcept,但是VC++ 2008和2010不支持这个。

就我个人而言,在编译器开始支持 C++11 noexcept 之前,我会使用定义为 throw()(或者甚至什么都没有)的宏,然后对其进行更改。

【讨论】:

  • 感谢您的回答 - 我选择使用 __declspec(nothrow) 因为 VC++ 编译器可以使用它来实际优化不需要的异常代码。
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2012-02-28
相关资源
最近更新 更多