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

时间:2014-03-12 13:23:59

标签: c++ exception struct

此处来自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";
  }
};

我理解constwhat表示该函数不会修改任何内容 结构的成员,但最后throw()是什么意思?

3 个答案:

答案 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,但请遵循   寻找异常处理程序的正常路径。

     

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

见这里:http://www.cplusplus.com/doc/tutorial/exceptions/