2. try语句

try语句(也叫 try-catch 语句)用于异常流程的处理,它将尝试捕获异常,并将程序有异常状态转成正常状态(重新进入正常流程)。

语法

try {
    可能触发错误的语句
}
catch (错误类型1 错误对象1) {  // catch 子句可以有多个。 
    处理代码可以为空)。
}
catch (错误类型2 错误对象2) {
    处理代码可以为空)。
}
catch (...) {  // catch... 子句只能有一个且只能放在最后。 
}

说明

示例

// filename: try_stat.cpp
#include <iostream>

using namespace std;

class MyRange{
    public:
        MyRange(int begin, int end, int stp=1): start(begin), stop(end), step(stp) {}
        // 重载 [] 运算符
        int operator [] (int index) {
            int value = start + index * step;
            if (index < 0)
                throw "索引不能为负数值";
            if (step > 0 && value > stop)
                throw "索引越界";
            else if (step < 0 && value < stop)
                throw "索引越界";

            return value;
        }
    private:
        int start;
        int stop;
        int step;
};

int main(int argc, char * argv[]) {
    MyRange r2(1, 10, 3);  // 生成 1、4、7

    try{
        cout << r2[0] << endl;  // 打印 1
        cout << r2[1] << endl;  // 打印 4
        cout << r2[-1] << endl;  // 抛处 const char * 类型的错误
        cout << r2[100] << endl;  // 抛处 const char * 类型的错误
    }
    catch (const char * err) {
        cout << "捕获 const char * 类型的错误: " << err << endl;
        cout << "错误已经处理,程序进入正常状态!" << endl;
    }
    catch (...) {
        cout << "捕获其他类型的错误并处理" << endl;
    }
    printf("程序正常退出!\n");

    return 0;
}

编译和运行结果如下:

weimz@mzstudio:~$ g++ -o try_stat try_stat.cpp
weimz@mzstudio:~$ ./try_stat 
1
4
捕获 const char * 类型的错误: 索引不能为负数值
错误已经处理,程序进入正常状态!
程序正常退出!

可见 r2[-1] 内抛出的 const char * 类型的错误被 try 语句收到,并将程序转为正常状态(正常流程)继续向 try 语句后执行。