c ++:std :: exception的what()方法中的奇怪语法

时间:2010-05-25 10:46:43

标签: c++ exception

当我从std::exception继承以定义我自己的异常类型时,我需要覆盖what()方法,该方法具有以下签名:

virtual const char* what() const throw();

这对我来说肯定很奇怪,就像签名中有两个方法名称一样。这是一些非常具体的语法,就像纯虚方法一样,例如:

virtual int method() const = 0;

或者这是一个功能,也可能以某种方式在另一个环境中使用?如果是这样,它可以用于什么?

3 个答案:

答案 0 :(得分:12)

它被称为exception specificationsthrow()不允许从此方法中抛出任何异常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( );