异常多少类

How much classes for exceptions

在 C++ 中创建和处理异常的常用方法是什么?

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

...
throw CannotRead();
...

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

在 C++ 中执行此操作的惯用方法是什么?

如果能提供比较这两种方法的文章链接,我们将不胜感激。

谢谢

通常,正如其他人在评论中提到的那样,您从 std::runtime_error 派生并重载 what() 虚方法。作为对reader的练习,也可以编写一个构造函数来捕获异常消息。 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;
}

没有一成不变的建议,但我个人的经验法则是:

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