异常的课程数量

时间:2015-02-09 18:22:30

标签: c++ c++11 exception-handling

创建&的常用方法是什么?处理c ++中的异常?

class CannotRead : public runtime_exception { ... }
class CannotParse : public runtime_exception { ... }

...
throw CannotRead();
...

...
throw runtime_error("cannot read");
...

在C ++中这样做的惯用方法是什么?

赞赏比较这两种方法的文章的链接。

由于

2 个答案:

答案 0 :(得分:4)

没有任何削减和干燥的建议,但我个人的经验法则是:

  • 抛出std::runtime_error(或其中一个兄弟姐妹,视情况而定)
  • 直到您发现需要区分catch - 各种异常之间的时间,然后开始深化继承层次。

答案 1 :(得分:1)

通常,正如其他人在评论中提到的那样,您派生自std::runtime_error并重载what()虚拟方法。作为读者的练习,也可以编写构造函数来捕获异常消息。 This网站提供了以下代码(虽然我略微修改了它以反映std::runtime_error更改)。

#include <iostream>
#include <exception>

class MyException : public std::runtime_error
{       
    const char * what () const throw () { 
        return "C++ Exception";
    }
};

int main()
{
    try {
        throw MyException();
    } catch(MyException& e) {
        std::cout << "MyException caught" << std::endl;
        std::cout << e.what() << std::endl;
    } catch(std::exception& e) {
    }

    return 0;
}