C++中的try语句块和异常处理

2023-12-16 05:44:46

异常处理及其语法

异常处理是编程中用于处理程序运行时错误的一种机制。以下是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.

文章来源:https://blog.csdn.net/qq_46348508/article/details/135025352
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。