virtual const char* what() const throw()
{
}
据我所知,它是一个返回指向可变字符常量的常量指针的函数。其他部分我不太确定。有人可以帮忙吗?
virtual const char* what() const throw()
{
}
据我所知,它是一个返回指向可变字符常量的常量指针的函数。其他部分我不太确定。有人可以帮忙吗?
关于const throw()
部分:
const
表示这个函数(它是一个成员函数)不会改变被调用的对象的observable state(可观察状态)。编译器通过禁止你从这个函数调用非const
方法和禁止修改成员值来强制执行这一点。throw()
表示你向编译器承诺,这个函数永远不会允许异常抛出。这被称为异常规范(exception specification),长话短说,它是无用且可能具有误导性的。what
是一个虚成员函数,返回const char*
类型,可以在const对象上调用(最后的const)。throw()
表示它“有点”保证不会抛出任何异常。从左到右:
virtual
- 此函数可以在派生类中被覆盖const char*
- 此函数返回一个指向常量(字符数组)的可修改指针what()
- 此函数不带参数const
- 此函数不会修改调用它的对象的非mutable
成员,因此可以在其类的const
实例上调用throw()
- 此函数不应抛出任何异常。如果抛出异常,将调用unexpected
。虚函数返回一个指向不可修改的字符缓冲区的指针,不带任何参数,不修改其所属类的任何成员变量(即可以在const实例上调用),并且不会抛出任何类型的异常。
throw()
装饰符意味着它不会抛出任何异常,而不是它可以抛出任何类型的异常。 - Cody Graywhat()
函数不带参数,返回一个指向const char
的指针(因此您不能修改指针指向的内容,但可以修改指针本身)。它是虚函数
,因此其行为可以在派生类中被覆盖。它不会抛出异常,并且不会修改其所属类的任何成员。
throw()
修饰符意味着它不会抛出任何异常。 - Cody Grayvirtual
这个关键字用于在派生类中重写基类中的函数const char*
这是一个指向常量字符的指针what
返回一个以空字符结尾的字符序列,可用于标识任何异常throw()
throw 中的参数为空,因此它将为所有异常调用 std::unexpected#include<iostream>
#include<exception>
class Myexception:public exception
{
virtual const char* what() const throw()
{
return "My exception here";
}
} myex;
int main()
{
try()
{
throw myex;
}
catch(exception &e)
{
cout<<e.what()<<endl;
}
return 0;
}
const
表示不允许更改调用它的对象的状态,也就是说不能修改对象的任何成员变量。throw()
部分是异常说明,表示该方法不会抛出任何异常。virtual
: 这意味着该函数可以在子类中重新实现,并且通过基类指针调用该方法将最终调用重新实现。
const char *
不是指向可变字符的常量指针 - 它是另一种方式。
const
表示此方法甚至可以在此类的 const 实例上调用。
throw()
表示此方法不会产生任何异常。
它实际上返回一个指向常量字符块的可变指针。
其他内容已经由其他人解释过了。