C++中的finally语句块是什么?

  • Post category:cplus

在C++中,finally语句块是用于无论try代码块是否成功完成执行时,都会得到执行的语句块。finally语句块通常用于清理资源或进行最终的操作。无论try代码块是否抛出异常,在finally中的代码都会得到执行。

finally语句块必须跟在try块或catch块后面。无论try块中的代码是否抛出异常,finally中的代码总会被执行。

下面是finally语句块的一些使用示例:

示例一:

#include <iostream>
using namespace std;

int main() {
    int x = 5;
    try {
        if(x == 5)
            throw "x is 5";
    } catch(const char* error) {
        cout << "Caught Exception: " << error << endl;
    } finally {
        cout << "finally block executed" << endl;
    }
    return 0;
}

输出:

Caught Exception: x is 5
finally block executed

解释:在try块中,我们抛出了一个字符串异常。控制流被转移到了catch块中。在catch块中,我们输出了异常,然后控制流转移到了finally块中。在finally块中,我们输出了一条语句。

示例二:

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    try {
        if(x == 5)
            throw "x is 5";
    } catch(const char* error) {
        cout << "Caught Exception: " << error << endl;
    } finally {
        cout << "finally block executed" << endl;
    }
    return 0;
}

输出:

finally block executed

解释:这一次,try块中的代码没有抛出异常,所以控制流不会转移到catch块中。finally块会得到执行,并输出一条语句。

如果在try块中有return语句,那么控制流会在执行finally块之前,先转移至return语句所在的代码块。

无论您何时想要在try块或catch块中使用资源,并在不管异常的情况下释放这些资源,都可以使用finally块。