任何人都可以向我解释C++异常规范吗?

sky*_*gle 12 c++

任何人都可以解释C++中使用的异常规范吗?

  • 它们何时使用(我很少看到它在代码中使用)
  • 使用异常规范有哪些优缺点(优点/缺点)?

Bil*_*eal 15

它们何时使用(我很少看到它在代码中使用)
希望永远不会因为明年标准化而在下一版C++中被弃用.

使用异常规范有哪些优缺点(优点/缺点)?
它们为代码的读者提供了一种方法,可以准确地知道函数允许抛出的异常.问题是,如果抛出了意外的异常(不在规范中),那么程序将被终止(默认情况下).


pm1*_*100 13

他们通常被认为是一个坏主意.

他们说一个方法会抛出什么.缺点是,如果该方法抛出其他任何东西,那么您的应用程序将终止.所以它是一种保证,但与Java不同.它增加了检查的开销.

  • +1:但是挑剔:申请没有终止; 调用意外函数.默认情况下,这意味着您的应用程序已终止,但如果您有意外的功能正在执行其他操作而不会发生其他事情. (4认同)
  • @Billy,@ Ben:它不能从意外返回,但允许抛出一个新的异常.如果该异常不在允许的异常中,则尝试使用`std :: bad_exception`.如果**不在允许的例外中,则程序终止.最终结果是允许的异常传播出函数,或者程序终止. (3认同)

Ash*_*ain 6

重要的是要知道:在C++的下一个版本中不推荐使用异常规范,除了no-throw说明符(throw()),它基本上正式说"不要使用它们".

放在throw()函数后意味着该函数不会抛出任何异常.如果它仍然存在,应用程序将被终止(可能 - 调用意外的处理程序),因此应用程序的其余部分可以使用该函数,因为它知道它不会抛出异常.这对于编写异常安全的代码非常方便.

例:

void MyFunction() throw() // does not throw any exceptions
{
    /* ... */
{
Run Code Online (Sandbox Code Playgroud)

  • 无投保证非常重要.特别是对于析构函数.虽然编译器会警告你有一个可能抛出的无抛出方法会很好. (3认同)