使用VC ++ 2008和2010时,哪个标记最好用于表示函数不会抛出异常:
throw()
(C ++标准)__declspec(nothrow)
(MS扩展名)我读了一些较旧的论坛讨论,其中人们说使用throw()
实际上可能会强制编译器生成额外的代码来捕获异常,以防函数抛出(针对标记)。他们的建议不是使用throw()
而是使用__declspec(nothrow)
,因为编译器实际上可以使用它进行优化。
我做了一些搜索,但我无法得到真正有用的结果。根据我的理解,Boost库建议不要使用它们here。 __declspec(nothrow)
是非标准的C ++,因此如果MS实现了异常规范,那么throw()
行为可能会发生变化时,它将继续以相同的方式工作。
答案 0 :(得分:2)
标准格式为noexcept
,但VC ++ 2008和2010不支持此格式。
就个人而言,我会使用一个宏,定义为throw()
(或者甚至可能没有),直到编译器开始支持C ++ 11 noexcept
,然后更改它。