在此代码中:
#include <iostream>
#include <exception>
using namespace std;
class myexception : public exception
{
virtual const char* what() const throw() //<---**** Stared statement.
{
return "My exception happened";
}
};
stared 语句是什么意思。使用 const 关键字和 char * 类型的原因是什么?
我对两个const关键字感到困惑。我知道const的基本用法,比如声明一个存储不可更改值的变量.....有点像#define但是当它与函数一起使用时(比如在参数中),这是令人困惑的。我对这行中使用char *而不是char感到困惑。另外在const
之前指定throw()
的目的是什么?
答案 0 :(得分:2)
[更新]由于作者提出了更多问题,我将用两个部分更新答案。
首先,这个函数是std::exception::what()
的覆盖函数,基函数是这样定义的,所以覆盖的版本必须是相同的语法。
然后让我们将声明分成两部分。
const char*
what() const throw()
首先,检查return语句return "My exception happened";
,它返回类似const c的字符串,类型为const char*
,因此返回值就是这样定义的。
其次,const
之后的what()
表示它是一个const函数,它不会修改类的任何成员(虽然mutable
除外)。
throw()
意味着它永远不会抛出。
答案 1 :(得分:0)
const char *表示调用者对what()将接收一个字符串,并且无法更改字符串(指针指向的char)。 这是std :: exception :: what()的重写,所以你可以向你自己的异常返回一个新的解释(这就是为什么你必须返回const char *,原始方法也是如此)