在Linux系统中的C++程序中,异常处理主要通过try
、catch
和throw
关键字来实现。下面是一个简单的示例:
#include <iostream> #include <stdexcept> int main() { try { // 抛出异常 throw std::runtime_error("An error occurred"); } catch (const std::runtime_error& e) { // 捕获异常并处理 std::cerr << "Caught exception: " << e.what() << std::endl; } catch (...) { // 捕获所有其他类型的异常 std::cerr << "Caught an unknown exception" << std::endl; } return 0; }
在这个示例中,我们使用try
块来包裹可能抛出异常的代码。如果try
块中的代码抛出了一个异常,程序会立即跳转到与该异常类型匹配的catch
块。如果没有找到匹配的catch
块,程序会调用std::terminate
函数来终止程序。
在这个例子中,我们抛出了一个std::runtime_error
类型的异常,并使用一个catch
块来捕获它。catch
块的参数是一个对异常对象的常量引用,我们可以使用what()
成员函数来获取异常的描述信息。
注意,catch(...)
可以捕获所有类型的异常,包括那些没有显式throw
语句的异常。这通常用于处理未知类型的异常,但在实际编程中,最好尽量避免这种情况,因为它可能导致程序崩溃或产生不可预测的行为。
此外,C++还支持自定义异常类,你可以通过继承std::exception
类或其他标准异常类来创建自己的异常类。例如:
#include <iostream> #include <stdexcept> class MyException : public std::runtime_error { public: MyException(const std::string& message) : std::runtime_error(message) {} }; int main() { try { throw MyException("An error occurred in MyException"); } catch (const MyException& e) { std::cerr << "Caught MyException: " << e.what() << std::endl; } catch (const std::runtime_error& e) { std::cerr << "Caught std::runtime_error: " << e.what() << std::endl; } catch (...) { std::cerr << "Caught an unknown exception" << std::endl; } return 0; }
在这个示例中,我们定义了一个名为MyException
的自定义异常类,它继承自std::runtime_error
。然后我们在try
块中抛出一个MyException
对象,并使用一个catch
块来捕获它。