这个宣言是什么意思?exception()throw()

Mur*_*ali 8 c++ stl

std :: exception类定义如下

exception() throw() { }
virtual ~exception() throw();
virtual const char* what() const throw();
Run Code Online (Sandbox Code Playgroud)

throw()语法在声明中的含义是什么?可以throw()接受参数吗?什么没有参数意味着什么?

小智 18

这是一个"例外规范".throw()表示"此函数不会抛出任何异常".你也可以指定异常,所以throw(foo)会说这个函数可能抛出foo类型的异常.

这个功能的用处在C++社区中已经引起了很多争论 - 一般评估似乎并不是特别有用.有关详细信息,请查看此Herb Sutter文章.


Lea*_*elo 12

不带任何参数,这意味着上述功能并不会引发任何异常.

如果您将任何内容指定为参数,则表示该函数将仅抛出该类型的异常.但请注意,这不是对编译器的强制执行.如果碰巧抛出某个其他类型的异常,程序将调用std :: terminate().

  • @Neil:我相信VC++会识别异常规范,但它不会强制执行它们,除非最近发生了变化. (4认同)