关注我们
  • 公众号

  • 抖音号

  • 小程序

联系方式: 400-8162-938
栏目导航

c++异常处理try-catch块

来源:华未云

更新:2025-02-14 17:31:52|关注1

1. try

try块用于包围可能会抛出异常的代码。当这些代码中的某一部分检测到错误(通常通过抛出异常),控制流将跳转到相应的catch块。

try {
    // 可能会抛出异常的代码
}

2. catch

catch块用于捕获并处理try块中抛出的异常。每个catch块都指定了它希望捕获的异常类型,并包含处理该异常的代码。

catch (异常类型 变量名) {
    // 处理异常的代码
}

        异常类型:指定了catch块可以捕获的异常类型。可以是具体的异常类(如std::runtime_error),也可以是更一般的异常基类(如std::exception),甚至可以是任何类型(但通常不推荐这样做,因为它会捕获所有类型的异常,包括那些你不希望处理的异常)。

        变量名:在捕获异常时,异常对象会被传递给这个变量。你可以使用这个变量来获取异常的详细信息,例如异常消息。

3. 示例

以下是一个简单的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_errorstd::divide_by_zero异常。在实际应用中,你应该使用条件语句来检查除数是否为0,并相应地抛出异常或采取其他措施。



声明:以上是华未云整理的全部内容。本站资源来自及互联网公开收集,仅限学习交流使用,请遵循相关法律法规,如有侵权争议、不妥之处请联系本站删除处理!