Axl*_*Axl 4 c++ string pointers exception char
有人可以解释为什么自编的C++异常,从异常继承返回一个char*而不是一个字符串?
class myexception: public exception
{
virtual const char* what() const throw()
{
return "My exception happened";
}
} myex;
Run Code Online (Sandbox Code Playgroud)
由于std :: exception被设计为所有异常的基类,因此接口的编写方式使得特化不需要可能抛出的代码.他们可能会使用它,但他们不需要它来实现接口.
如果std::string例如需要基本异常类,那么std :: out_of_memory无法从它继承(因为在运行时已经遇到内存不足的情况后,构造一个传递给构造函数的字符串可能不起作用).
完全基于POD类型的类的构造允许实现std :: out_of_memory(以及可能在特殊情况下创建的其他异常)作为特化.
这并不意味着您不能在异常中使用std :: string(或其他任何东西).实际上,实际中的大多数异常都是从std :: logic_error和std :: runtime_error派生的,两者都采用了std :: string参数.
注意:除非您确实需要这个,否则请考虑从std :: runtime_error或std :: logic_error继承您的基本异常类.它们是更高级别,并且直接从std :: exception继承比大多数情况需要的更多.
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |