异常多少类
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
时区分你的各种异常,然后开始加深继承层次结构。
在 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
时区分你的各种异常,然后开始加深继承层次结构。