对于库代码,创建并抛出自定义异常类( library :: exception )还是抛出标准异常(runtime_error、invalid_argument等)是更好的做法?
发布于 2011-01-20 21:31:27
通常情况下,专门化(继承)标准异常并抛出它会更好。
这样,只需捕获一个std::exception
,就可以将其捕获为泛型异常,但如果需要更专业的代码,还可以捕获特定的自定义异常类型。
有关抛出的内容,请参阅此C++Faq。
发布于 2011-01-20 21:33:07
IMHO自定义异常。您的图书馆的客户将会收到这封信。他将知道究竟是什么引发了异常。
发布于 2011-01-20 21:43:05
根据经验,很少需要几个异常类。
在我的大多数代码中(主要是数字--如果你这样做的话,例如。IO,情况是不同的),我抛出标准exeptions (runtime_error
,invalid_argument
,...)因为它们倾向于指示一些不容易恢复的东西(可能除了invalid_argument
),并且很可能不会被用户代码捕获(除了可能在向用户抛出消息框的顶层)。
如果存在一些打算由典型用户代码捕获的异常,例如:bad_custom_cast
或bad_market_data_identifier
,而不是冒泡到main (就像数值例程中的失败,或bad_alloc
),我创建了一个自定义类。但实际上这是相当罕见的。
https://stackoverflow.com/questions/4747706
复制相似问题