essential c++ 第七章 异常处理
程序员文章站
2022-07-13 21:45:07
...
c++异常处理涉及到三个关键字:try、catch、throw。
- throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。
- catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。
- try: try 块中的代码标识将被**的特定异常。它后面通常跟着一个或多个 catch 块。
1.抛出异常
异常处理机制包括两个部分:
1.异常的鉴定与发出
2.异常的处理方式
inline void Triangular_iterator::
check_integrity(){
if(_index>=Triangular::_max_elems)
throw iterator_overflow(_index,Triangular::_max_elems)
}
最简单的异常对象可以是数字或字符串
throw 42;
throw "yichang";
大部分时候,被抛出的异常都属于特定的异常类
class iterator_overflow{
public:
iterator_overflow(int index,int max):_index(index),_max(max){
}
int index(){
return _index;
}
int max(){
return _max;
}
void what_happened(ostream &os=cerr){
os << "internal error:current index";
}
private:
int _index;
int _max;
};
2.捕获异常
使用catch来捕获抛出的异常
catch:包括小括号内的类型或对象、大括号内的一组语句
extern void log_message(const char *);
extern string err_message[];
extern ostream log_file;
bool some_function(){
bool status=true;
catch(int errno){
log_message(err_message[errno]);
status =false;
}
catch(const char *str){
log_message(str);
status =false;
}
catch(iterator_overflow &iof){
iof.what_happened(log_file);
status =false;
}
return status;
}
异常对象的类型会被拿来逐一和每个catch子句对比,如果类型符合,那么该catch就会被执行
3.提炼异常
catch语句应该和try一起。表示如果try中有任何异常发生,那么便由接下来的catch子句加以处理
#include <iostream>
using namespace std;
double division(int a, int b)
{
if( b == 0 )
{
throw "Division by zero condition!";
}
return (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) {
cerr << msg << endl;
}
return 0;
}
在上面的代码中,在我们执行try语句块中的语句时,抛出了异常,所以立即开始执行catch中的语句,因为throw抛出的异常是字符串,因此catch中的类型应该是char*,来保证和throw抛出的一致。
4.局部资源管理
上一篇: vue隐藏和显示元素
下一篇: VUE中隐藏和显示