【发布时间】:2012-05-07 09:02:13
【问题描述】:
在 C++ 中,我应该使用 std::runtime_error 来指示发生了某种错误,还是应该创建继承自 std::runtime_error 的自定义异常,以便更好地处理它们。
例如,如果我以某种方式从用户那里得到输入,那会更好:
if (inputInvalid)
{
throw std::runtime_error("Invalid input!");
}
对比...
class invalid_input
: public std::runtime_error /* or should I inherit from std::exception? */
{
public:
invalid_input()
: std::runtime_error("Invalid input!")
{
};
};
-------------------------------------------------------
if (inputInvalid)
{
throw invalid_input();
}
哪个被认为更好地使用异常处理/哪个更好?
【问题讨论】:
-
后者可以捕获这种特定类型的运行时错误,而第一个只允许您捕获“a”运行时错误。哪个更好实际上取决于您计划如何处理错误。
-
这是一个非常敏感的话题,每个人都有不同的看法。看看
Go-like 方法(throw终止任务,因此不需要有不同的类型)与Java方法及其非常复杂的层次结构。
标签: c++ exception coding-style exception-handling runtime-error