C++异常返回类型为什么字符*
C++ exception return type why char*
有人可以解释为什么自写的异常C++异常,从异常继承返回字符*而不是字符串?
class myexception: public exception
{
virtual const char* what() const throw()
{
return "My exception happened";
}
} myex;
来源 : http://www.cplusplus.com/doc/tutorial/exceptions/
由于 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 继承比大多数情况需要的要多。
myexception
继承自std::exception
类,该类 http://en.cppreference.com/w/cpp/error/exception/what 定义此虚拟方法:
virtual const char* what() const;
不能更改派生类中虚函数的签名。 std::exception
具有这样的签名std::string
因为构造函数本身可能会引发异常,这将导致灾难。
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么签名字符可以保存大于 127 的值?
- 当我输入字符类型的数字时,为什么我无法获得整数?
- 为什么 std::string_view 比常量字符*快?
- 为什么strlen(s)与s的大小不同,为什么cout-char显示的是字符而不是数字
- 为什么我的字符* 复印机返回不同的东西?
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 为什么没有访问所有字符串字符?
- 为什么我的代码在尝试复制字符数组时引发 C6386 错误?
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- 为什么char不是单个字符
- 为什么从 std::cin 读取输入后右括号字符的值有时不是")"?
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 为什么在 c++ 中索引字符串会发出隐式转换警告?
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 为什么不能将字符指针定义为数组?
- 输出流中的第一个字符将替换为该流中被删除的最后一个字符.为什么会这样