当我从std::exception
继承以定义我自己的异常类型时,我需要覆盖what()
方法,该方法具有以下签名:
virtual const char* what() const throw();
这对我来说肯定很奇怪,就像签名中有两个方法名称一样。这是一些非常具体的语法,就像纯虚方法一样,例如:
virtual int method() const = 0;
或者这是一个功能,也可能以某种方式在另一个环境中使用?如果是这样,它可以用于什么?
答案 0 :(得分:12)
它被称为exception specifications
。 throw()
不允许从此方法中抛出任何异常throw(int)
只允许抛出类型int
的异常。
异常规范将在C ++ 0x中删除。 This对原因给出了很好的解释。
答案 1 :(得分:1)
virtual const char* what() const throw();
what()
是一个虚拟常量方法,它返回指向const char
的指针,不得抛出任何异常。不是很奇怪的方法声明:)
答案 2 :(得分:-1)
在ios_base
中定义了异常类型failure
。它作为类型的基类
可以由I / O系统抛出的异常。
它继承了exception
。
failure
类具有以下构造函数:
explicit failure(const string &str);
此处,str
是描述错误的消息。
可以通过调用failure
函数从what()
对象获取此消息,如下所示:
virtual const char *what( ) const throw( );