对what()调用的解释

时间:2015-05-19 10:37:57

标签: c++ syntax

using namespace std;

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

请考虑标记的行。 有人可以解释一下该声明中使用的语法

我想我应该把我的查询范围缩小到&#34; const throw()&#34; 仅部分......

感谢所有回复

4 个答案:

答案 0 :(得分:5)

它是成员函数定义。

  • const char *是返回类型,指向常量字符的指针,按惯例,是以零结尾的字符串数组的第一个字符。
  • what是函数名称
  • ()是一个空参数列表,表示该函数不带参数
  • const限定了该功能,因此可以在const对象上调用该功能,并且无法直接修改该对象的成员
  • throw ()是一个例外规范,可防止它抛出任何异常。

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

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"
}

答案 1 :(得分:1)

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

const char * - 是函数的返回类型。

what - 是函数的名称。

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

using namespace std;

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

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

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

  1. 当您使用该方法时,您正在捕捉所有抛出的内容
  2. 不是扔你不应该的东西
  3. 其余部分是相当标准的:

    const char * what () const throw ()

    what():一个名为what。

    的函数

    what() const:what()是一个const函数,因此它可以用于MyException类型的const对象

    const char* what() const:什么是const函数,它返回指向const char

    的指针