更新:2025-02-14 17:31:52|关注1 人
1. try
块try
块用于包围可能会抛出异常的代码。当这些代码中的某一部分检测到错误(通常通过抛出异常),控制流将跳转到相应的catch
块。
try { // 可能会抛出异常的代码 }
catch
块catch
块用于捕获并处理try
块中抛出的异常。每个catch
块都指定了它希望捕获的异常类型,并包含处理该异常的代码。
catch (异常类型 变量名) { // 处理异常的代码 }
异常类型:指定了catch
块可以捕获的异常类型。可以是具体的异常类(如std::runtime_error
),也可以是更一般的异常基类(如std::exception
),甚至可以是任何类型(但通常不推荐这样做,因为它会捕获所有类型的异常,包括那些你不希望处理的异常)。
变量名:在捕获异常时,异常对象会被传递给这个变量。你可以使用这个变量来获取异常的详细信息,例如异常消息。
以下是一个简单的C++异常处理示例:
#include <iostream> #include <stdexcept> // 包含标准异常类的头文件 int main() { try { // 可能会抛出异常的代码 int num = 0; std::cout << "10 / " << num << " = " << 10 / num << std::endl; // 这里会抛出std::runtime_error或std::divide_by_zero错误(但实际上是未定义行为,因为除以0不是C++标准异常) } catch (const std::runtime_error& e) { // 捕获并处理std::runtime_error类型的异常 std::cerr << "Caught a runtime_error: " << e.what() << std::endl; } catch (const std::exception& e) { // 捕获并处理所有std::exception类型的异常(包括std::runtime_error,因为它是std::exception的子类) std::cerr << "Caught an exception: " << e.what() << std::endl; } catch (...) { // 捕获所有其他类型的异常(不推荐这样做,因为它会捕获所有异常,包括那些你不想处理的异常) std::cerr << "Caught an unknown exception" << std::endl; } return 0; }
注意:上面的示例中,除以0的行为在C++中是未定义的,通常不会直接抛出std::runtime_error
或std::divide_by_zero
异常。在实际应用中,你应该使用条件语句来检查除数是否为0,并相应地抛出异常或采取其他措施。
声明:以上是华未云整理的全部内容。本站资源来自及互联网公开收集,仅限学习交流使用,请遵循相关法律法规,如有侵权争议、不妥之处请联系本站删除处理!