异常处理

异常处理是一种用于处理程序执行过程中可能出现的错误或异常情况的机制。
它允许程序在遇到无法正常处理的问题时,将控制权转移到专门的错误处理代码段。

C++ 异常处理基于三个核心关键字:try、catch、throw。

  • try:用于包裹可能抛出异常的代码,一个 try 后可以跟随多个 catch,分别处理不同类型的异常。
  • throw:用于在检测到错误时抛出异常。
  • catch:负责捕获并处理特定类型的异常,也可以捕获所有类型的异常。

示例 1:抛出字符串

#include <iostream>
using namespace std;

double division(int a, int b) {
    if (b == 0) {
        throw "Division by zero condition!";
    }
    return (double)a / b;
}

int main() {
    int x = 50;
    int y = 0;
    double z = 0;

    try {
        z = division(x, y);
        cout << z << endl;
    } catch (const char* msg) {
        cout << msg << endl;
    }

    return 0;
}

示例 2:抛出 runtime_error

#include <iostream>
#include <stdexcept>
using namespace std;

double hmean(double a, double b) {
    if (a == -b)
        throw runtime_error("Runtime error occurred.");
    return 2.0 * a * b / (a + b);
}

int main() {
    double x = 10;
    double y = -10;

    try {
        double result = hmean(x, y);
        cout << "hmean: " << result << endl;
    } catch (const runtime_error& e) {
        cout << "Caught: " << e.what() << endl;
    } catch (...) {
        cout << "Caught an unknown exception." << endl;
    }

    return 0;
}