此处来自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";
}
};
我理解const
后what
表示该函数不会修改任何内容
结构的成员,但最后throw()
是什么意思?
答案 0 :(得分:21)
这意味着它不会抛出任何异常。这是what
这样的函数的重要保证,通常在异常处理中调用:在您尝试处理异常时,不希望抛出另一个异常。
在C ++ 11中,您通常应该使用noexcept
。旧抛出规范已弃用。
答案 1 :(得分:8)
throw ()
是一个异常说明符,声明what()
永远不会抛出异常。但是,这在C ++ 11中已弃用(请参阅http://en.wikipedia.org/wiki/C++11)。要指定函数不抛出任何异常,C ++ 11中存在noexcept
关键字。
答案 2 :(得分:4)
您可以指定要抛出的类型,以便它抛出任何内容 但是那个类型(例如
int
),那么函数调用std::unexpected
而不是寻找处理程序或调用std::terminate
。在这种情况下,它不会抛出任何异常,这很重要
what()
。如果这个throw说明符留空而没有类型,这意味着 任何异常都会调用
std::unexpected
。没有投掷的功能 说明符(常规函数)从不调用std::unexpected
,但请遵循 寻找异常处理程序的正常路径。这称为动态异常规范,它很常见 旧代码。它被认为已被弃用。