what() 调用的解释

Explanation to the what() call

using namespace std;

struct MyException : public exception
{
  const char * what () const throw () // <--- This
  {
    return "C++ Exception";
  }
};

请考虑标记的行。 有人可以向我解释该语句中使用的语法吗

我想我应该将查询范围缩小到 "const throw()" 部分...

感谢大家的回复

what 是 returns 一个 const char * 的函数。它也是一个从不抛出异常的函数。

该行是classMyException的成员函数声明。它遵循与任何其他函数声明完全相同的语法。

const char * - 是函数的 return 类型。

what - 是函数的名称。

() -(空)参数列表。该方法不带参数。

const - 声明这是一个 const 函数(一般来说,这意味着它不应该改变对象的状态)。

throw () - 声明函数不抛出异常。

这是一个成员函数定义。

  • const char * 是 return 类型,指向常量字符的指针,按照惯例,它是零终止字符串数组的第一个字符。
  • what是函数名
  • ()是一个空参数列表,表示函数不带参数
  • const限定函数,所以可以在const对象上调用,不能直接修改对象的成员
  • throw () 是一个异常规范,可以防止它抛出任何异常。

这会覆盖 exception 基 class 中声明的虚函数,允许您获得描述抛出的特定异常的文本消息:

try {
    // Throw a specific type
    throw MyException();
} catch (std::exception const & ex) {
    // Catch a generic type and extract the message
    std::cerr << ex.what() << '\n';  // prints "C++ Exception"
}
using namespace std;

struct MyException : public exception
{
  const char * what () const throw () // <--- This
  {
    return "C++ Exception";
  }
};

从你的问题中不清楚你不确定哪一点,但我猜是 throw(),因为这不常用。

这用于记录方法可以抛出的异常类型,使编译器能够检查:

  1. 当你使用该方法时,你正在捕获所有抛出的东西
  2. 不扔不该扔的东西

该行的其余部分相当标准:

const char * what () const throw ()

what() : 一个名为 what.

的函数

what() const: what() 是一个 const 函数,所以它可以用在 MyException

类型的 const 对象上

const char* what() const:什么是const函数,returns指向const char

的指针