Visual c++ VC++;2008/2010:投掷()或uu declspec(诺思罗)是更好的选择吗?
使用VC++2008和2010时,哪个标记更适合用于指示函数不会引发异常:Visual c++ VC++;2008/2010:投掷()或uu declspec(诺思罗)是更好的选择吗?,visual-c++,exception,throw,declspec,Visual C++,Exception,Throw,Declspec,使用VC++2008和2010时,哪个标记更适合用于指示函数不会引发异常: throw()(C++标准) \uu declspec(nothrow)(MS扩展) 我读过一些以前的论坛讨论,其中有人说使用throw()。他们的建议是不要使用throw(),而是使用\u declspec(nothrow),因为编译器实际上可以使用它进行优化 我做了一些搜索,但没有找到真正有用的结果。从我的理解来看,Boost库建议不要使用它们 *-DEXSPECH(NoWORKE)/CODE >是非标准C++,
(C++标准)throw()
(MS扩展)\uu declspec(nothrow)
throw()。他们的建议是不要使用throw()
,而是使用\u declspec(nothrow)
,因为编译器实际上可以使用它进行优化
我做了一些搜索,但没有找到真正有用的结果。从我的理解来看,Boost库建议不要使用它们<代码> *-DEXSPECH(NoWORKE)/CODE >是非标准C++,因此如果MS实现异常规范,它将保持相同的工作方式,而 SUBER()(代码)>行为可能会发生变化。 < P>标准格式为<>代码>除< /代码>之外,但VC++ 2008和2010不支持此。
就我个人而言,我会使用一个宏,定义为throw()
(甚至可能什么都没有),直到编译器开始支持C++11noexcept
,然后更改它。相关:。就我个人而言,我会说“两者都不是”。异常规范在c++中不是很有用:@CodyGray谢谢,我在搜索nothrow和_declspec,我找不到太多。CodyGray:请注意,所有这些问题现在都被一个新的标准确定了日期,这大大改变了允许的优化。相关:。这篇博文中的评论也值得一读。谢谢你的回答-我选择使用_declspec(nothrow),因为VC++编译器可以使用它来优化不需要的异常代码。