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.旧抛出规范已弃用.
throw ()是一个异常说明符,声明what()永远不会抛出异常.但是,这在C++ 11中已弃用(请参阅http://en.wikipedia.org/wiki/C++11).要指定函数不抛出任何异常,noexcept关键字存在于C++ 11中.
您可以指定要抛出的类型,以便如果抛出该类型以外的任何东西(例如
int),则该函数将调用std::unexpected而不是寻找处理程序或调用std::terminate。在这种情况下,它不会抛出任何异常,这对于来说很重要
what()。如果将此抛出说明符留空且没有任何类型,则意味着
std::unexpected将为任何异常调用该说明符 。没有抛出说明符的函数(常规函数)从不调用std::unexpected,而是遵循寻找其异常处理程序的常规路径。这称为动态异常规范,在旧代码中很常见。被认为已弃用。
参见此处:http : //www.cplusplus.com/doc/tutorial/exceptions/