ThoughtWorks西邮联合创新实验室

C++中的异常处理

2018-06-06  本文已影响16人  李娅彬lyb

异常是程序可能检测到的运行时刻不正常的情况,最常见的异常包括:

除数为0、数组越界访问、磁盘或者光盘读写失败、无效的输入数据、内存耗尽、计算机网络不通、打印机未开等。异常总是意味着不该发生的事发生了,在程序设计过程中应该预料会发生何种异常,并进行必要的处理。

在程序运行阶段由于系统异常而产生的错误为异常错误。异常错误与程序设计错误是两码事,程序设计错误是指程序员在设计程序时由于人为因素而导致的错误;异常错误是指程序运行时由于系统异常而产生的,不是程序员的错误。

如果是程序员的设计出错误了,程序就不能通过编译检查或者运行结果不对;

如果是异常错误,程序执行时遇到异常情况就会突然终止或失控,使用户感到莫名其妙。

我们现在编写的代码都只是练习一下基础,所以感觉在程序设计中不写异常处理也没啥,但是在以后工作开发项目时可能会写大量的代码,这时异常处理至关重要。

接下来说一下C++中的异常错误吧,异常处理由3个关键字try throw catch 实现,是不是感觉和js中的异常处理有点像啊,

下面的程序主要用来处理除数为0的异常错误:

#include <iostream>

using namespace std;

int main() {

int m,n;

cout<<"Please input two integers:";

cin>>m>>n;

try{//在try代码块中包含需要监控的程序部分

if (n==0)

throw 0;

cout<< (m/n)<<endl;

}

catch(int){//catch 语句捕获一个整型异常

cout<<"Divided by 0!";

return -1;

}

}


下面的程序主要是处理从函数内部抛出的异常信 息

#include <iostream>

 using namespace std;

int division(int x, int y);

int main( ) {

int m,n;

cout<<"Please input two integers:";

cin>>m>>n;

try {

cout<<division(m,n)<<endl;

}

catch(int ){

cout<<"divided by 0"<<endl;

return -1;

}

return 0;

}

int division (int x, int y){

if(y == 0)

throw 0;

return (x/y);

}


下面的程序是用户自定义运行终止函数

#include<iostream>

using namespace std;

void myterm() //自定义的运行终止函数 {

cout<<"This is my terminater."<<endl;

exit(1);

}

int main() {

try{

set_terminate(myterm);

throw "Exception ... ";

}

catch(int i){}

return 0;

}


如果在程序中抛出了一个未被处理的异常信息,系统将调用C++标准库中的terminate()函数。默认情况下,terminate()函数将调用abort()函数来终止程序。

程序员也可以自己编写终止函数,然后通过set_terminate()函数传递给异常处理模块,使系统在找不到相匹配的异常错误处理模块时调用该函数,在函数内部一般是执行必要的清除工作,释放程序中申请的动态资源,然后调用exit()函数终止当前程序。

上一篇下一篇

猜你喜欢

热点阅读