virtual const char* what() const throw()
{
}
AFAIK它是一个函数,它将返回一个指向可变char的常量指针。剩下的我不确定。有人可以帮忙吗?
答案 0 :(得分:24)
关于const throw()
部分:
const
表示此函数(它是一个成员函数)不会更改调用它的对象的可观察状态。编译器强制执行此操作,不允许您从此方法中调用非const
方法,并且不允许您修改成员的值。throw()
表示您向编译器保证此函数永远不会允许发出异常。这被称为异常规范,并且(长话短说)没用,可能会产生误导。答案 1 :(得分:10)
这意味着what
是一个返回const char*
的虚拟成员函数,可以在const对象上调用(最后是const)。 throw()
表示有点保证不会抛出任何内容。
签出exception specifications in C++,并注意它们在C ++ 0x中已弃用:)
答案 2 :(得分:7)
从左到右:
virtual
- 此函数可在派生类中重写const char*
- 此函数返回一个指向常量(数组)char what()
- 此函数不带参数const
- 此函数不会修改调用它的对象的(非mutable
)成员,因此可以在其类的const
个实例上调用< / LI>
throw()
- 此函数不会抛出任何异常。如果是,则会调用unexpected
。答案 3 :(得分:3)
虚函数返回指向不可修改的字符缓冲区的指针,不带参数,不修改类所属的任何成员变量(即可以在const实例上调用),并且不会抛出任何类型例外。
答案 4 :(得分:2)
函数what()
不带参数,将pointer
返回const char
(因此您无法修改指针所指向的内容,但您可以修改指针本身)。它是virtual
,因此可以在派生类中重写其行为。它不会抛出异常。它不会修改它所属的类的任何成员。
答案 5 :(得分:1)
这是一个返回const char *的虚函数。方法末尾的const
表示不允许更改调用它的对象的状态。这意味着不允许修改对象的任何成员变量。 throw()
部分是异常规范,表示该方法不会抛出任何异常。
答案 6 :(得分:1)
virtual
:这意味着该函数可以在子类中重新实现,并且通过基类指针调用该方法将最终调用重新实现。
const char *
不是指向可变字符的常量指针 - 反之亦然。
const
表示甚至可以在此类的const实例上调用此方法。
throw()
表示此方法不会产生任何例外。
答案 7 :(得分:0)
它实际上返回一个指向常量字符块的 mutable 指针。
其他人已经解释了其余部分。
答案 8 :(得分:0)
关于函数后的const:真的有两个 意义,编译器理解的内容,以及通常的内容 编程约定使它成为意思。就编译器而言 有关,它所做的就是使this指针指向 常量。 const可以被抛弃,或者各种各样的间接 用于修改对象的可观察状态。到底, 这个const意味着程序员想要的意思。
今天通常的惯例是它意味着 对象的可观察状态不会改变。对于一些 合理定义“可观察状态”。
关于异常规范:一个空的异常 规范是无抛出保证,非常重要 在考虑异常安全时。下一个版本 标准已经弃用了异常规范,但确实如此 提供一些指定函数的其他方法 永远不要扔。
答案 9 :(得分:0)
virtual
用来覆盖基类的派生类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;
}
答案 10 :(得分:-1)
所有库例外的基类。
这是标准库和某些语言表达式抛出的所有异常的基类。您可以自由地派生自己的异常类,或使用不同的层次结构,或者抛出非类数据(例如,基本类型)。