【发布时间】:2011-01-04 18:21:02
【问题描述】:
std::exception 类定义如下
exception() throw() { }
virtual ~exception() throw();
virtual const char* what() const throw();
声明中的 throw() 语法是什么意思? throw() 可以带参数吗?没有参数是什么意思?
【问题讨论】:
std::exception 类定义如下
exception() throw() { }
virtual ~exception() throw();
virtual const char* what() const throw();
声明中的 throw() 语法是什么意思? throw() 可以带参数吗?没有参数是什么意思?
【问题讨论】:
不带任何参数,表示上述函数不会抛出任何异常。
如果您指定任何参数作为参数,您的意思是该函数将只抛出该类型的异常。但是请注意,这不是对编译器的强制执行。如果碰巧抛出了某种其他类型的异常,程序将调用 std::terminate()。
【讨论】:
throw() 可以带参数吗?
是的,它可用于声明该方法允许抛出的参数。
此外,析构函数被标记为 throw(),析构函数永远不应该抛出异常,因为它们可能已经在抛出异常的上下文中执行。
【讨论】:
【讨论】:
这是一个“异常规范”。 throw() 表示“这个函数不会抛出任何异常”。你也可以指定异常,所以 throw(foo) 会说这个函数可能会抛出 foo 类型的异常。
这个特性的有用性在 C++ 社区中已经引起了相当多的争论——普遍的评价似乎是它不是特别有用。更多详情请查看this Herb Sutter article。
【讨论】:
这是一个exception specification。没有参数意味着函数不能抛出任何异常。
【讨论】: