这可能是一个有点愚蠢的问题,但在C++中,当我想抛出异常时...我应该抛出什么?
我应该抛出std::exception,还是那是标准库保留的?或者我应该抛出一个字符串或整数?或者我应该抛出任何我觉得合适的东西?
抛出一个继承自 std::exception
的类;如果你 #include <stdexcept>
,你可以从许多现成、有用的派生类中选择。
继承自 std::exception
允许您的处理程序遵循一种可识别的风格,因为您可以始终使用 .what()
来获取文本信息。不要抛出原始类型,因为它们不携带语义信息。
std::exception
的异常的主要例外情况是,如果您正在使用一些具有自己的异常层次结构的框架(例如MFC),则通常应从其层次结构中的适当位置派生。请注意,我并不特别试图将MFC作为清晰的异常处理(或一般设计)的例子来阐述,只是一个包含异常层次结构的框架的示例。当您使用已经定义了异常层次结构的框架时,通常最好使用它。std::exception
,但其他框架有其他选择,如果他们提供了一个,您通常会希望将自己的异常适配进去。和 Java 不同的是,你可以抛出任何你想要抛出的类型(int、string、MyClass 等
)。但还是要听从 Kerrek 的建议。:)
std::exception
派生的异常之一。
std::exception
的子类,那么你可以在main
函数中放置一个catch-all子句来处理所有未在其他地方处理的异常,并打印异常的what()
。 - Fred Foo