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

时间:2010-01-13 17:52:53

标签: c++ stl

std :: exception类定义如下

exception() throw() { }
virtual ~exception() throw();
virtual const char* what() const throw();

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

5 个答案:

答案 0 :(得分:18)

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

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

答案 1 :(得分:12)

没有任何参数,这意味着所提到的函数会抛出任何异常。

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

答案 2 :(得分:1)

这是exception specification。没有参数意味着函数不能抛出任何异常。

答案 3 :(得分:1)

这称为投掷规范。它定义了可以从函数中抛出哪些异常(如果有的话)。

这些在理论上听起来很棒,但使用它们存在问题。

有关此问题的详细讨论可以在SO question找到。

答案 4 :(得分:0)

  

可以throw()接受参数吗?

是的,它可用于声明允许方法抛出的参数。

析构函数也被标记为throw(),析构函数永远不应该抛出异常,因为它们可能已经在抛出异常的上下文中执行。