std :: exception类定义如下
exception() throw() { }
virtual ~exception() throw();
virtual const char* what() const throw();
throw()语法在声明中意味着什么? 可以throw()接受参数吗?什么没有参数意味着什么?
答案 0 :(得分:18)
这是一个“例外规范”。 throw()表示“此函数不会抛出任何异常”。你也可以指定异常,所以throw(foo)会说这个函数可能抛出foo类型的异常。
这个功能的用处在C ++社区中已经引起了很多争议 - 一般评估似乎并不是特别有用。有关详细信息,请查看this Herb Sutter article。
答案 1 :(得分:12)
没有任何参数,这意味着所提到的函数不会抛出任何异常。
如果您指定任何内容作为参数,则表示该函数将仅抛出该类型的异常。但请注意,这是不对编译器的强制执行。如果碰巧抛出某个其他类型的异常,程序将调用std :: terminate()。
答案 2 :(得分:1)
这是exception specification。没有参数意味着函数不能抛出任何异常。
答案 3 :(得分:1)
答案 4 :(得分:0)
可以throw()接受参数吗?
是的,它可用于声明允许方法抛出的参数。
析构函数也被标记为throw(),析构函数永远不应该抛出异常,因为它们可能已经在抛出异常的上下文中执行。