C++中的try语句块和异常处理总结和代码示例

异常处理及其语法

异常处理是编程中用于处理程序运行时错误的一种机制。以下是C++中异常处理的关键组成部分:

try块

try块用于包装可能会引发异常的代码块。当发生异常时,程序将跳转到try块中的相关catch块,而不会中断程序的执行。

catch块

catch块用于捕获和处理try块中抛出的异常。每个catch块可以处理特定类型的异常,如果try块中的异常类型与catch块中指定的类型匹配,该catch块将被执行。

throw语句

throw语句用于在try块中引发异常。它可以引发各种类型的异常,包括内置类型、自定义类型和标准库异常。

异常类型

异常类型通常是类或结构,它们可以包含有关异常的信息,例如错误消息或错误码。C++标准库提供了一些内置的异常类型,如std::runtime_errorstd::logic_error等,但程序员也可以创建自定义异常类型。

e.what()std::exception 类的成员函数,用于获取异常对象的错误消息(error message)。这个函数返回一个 C 字符串(const char*),其中包含了关于异常的描述信息。

异常处理流程

如果在try块内引发异常,程序会在当前作用域内寻找匹配的catch块。如果找到匹配的catch块,它将处理异常。如果找不到匹配的catch块,程序将退出当前函数并查找包含该函数的更高层次的try块,以寻找匹配的catch块。如果一直没有匹配的catch块,程序将终止并显示默认的异常信息。

示例代码

#include <iostream>

// 定义一个函数,用于执行整数除法
double divide(int numerator, int denominator) {
    // 检查分母是否为零,如果是,则抛出 std::runtime_error 异常
    if (denominator == 0) {
        throw std::runtime_error("Division by zero is not allowed.");
    }
    // 执行除法操作,将分子强制转换为 double 类型以获得精确的结果
    return static_cast<double>(numerator) / denominator;
}

int main() {
    int numerator, denominator;
    
    std::cout << "Enter numerator: ";
    std::cin >> numerator;
    
    std::cout << "Enter denominator: ";
    std::cin >> denominator;
    
    try {
        // 调用 divide 函数尝试执行除法操作
        double result = divide(numerator, denominator);
        // 显示除法结果
        std::cout << "Result of division: " << result << std::endl;
    } catch (const std::runtime_error& e) {
        // 捕获并处理 std::runtime_error 异常,显示错误消息
        std::cerr << "Error: " << e.what() << std::endl;
    } catch (...) {
        // 捕获所有其他类型的异常,以防止程序崩溃
        std::cerr << "Caught an unknown exception." << std::endl;
    }
    
    return 0;
}

输入输出结果

Enter numerator: 1
Enter denominator: 0
Error: Division by zero is not allowed.
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值