在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块。