在c ++异常结构中的函数声明之后的throw()?

qed*_*qed 18 c++ struct exception

这是来自http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm

#include <iostream>
#include <exception>
using namespace std;

struct MyException : public exception
{
  const char * what () const throw ()
  {
    return "C++ Exception";
  }
};
Run Code Online (Sandbox Code Playgroud)

我理解const后面的what意思是函数不修改结构的任何成员,但throw()最后的意思是什么?

Seb*_*edl 24

这意味着它不会抛出任何异常.这是函数的重要保证what,它通常在异常处理中调用:在尝试处理异常时,不希望抛出另一个异常.

在C++ 11中,通常应该使用noexcept.旧抛出规范已弃用.


and*_*ras 9

throw ()是一个异常说明符,声明what()永远不会抛出异常.但是,这在C++ 11中已弃用(请参阅http://en.wikipedia.org/wiki/C++11).要指定函数不抛出任何异常,noexcept关键字存在于C++ 11中.


Bri*_*ian 5

您可以指定要抛出的类型,以便如果抛出该类型以外的任何东西(例如int),则该函数将调用std::unexpected 而不是寻找处理程序或调用std::terminate

在这种情况下,它不会抛出任何异常,这对于来说很重要 what()

如果将此抛出说明符留空且没有任何类型,则意味着std::unexpected将为任何异常调用该说明符 。没有抛出说明符的函数(常规函数)从不调用std::unexpected,而是遵循寻找其异常处理程序的常规路径。

这称为动态异常规范,在旧代码中很常见。被认为已弃用。

参见此处:http : //www.cplusplus.com/doc/tutorial/exceptions/