C++异常处理

原创 2012年03月30日 14:09:35
C++异常处理建立在三个关键字基础之上:try、catch和throw。通常,监测异常情况的程序语句包含在try中。如果try块中发生了异常(也就是错误),则用throw处理。异常由catch捕获,并得到处理如前所述,抛出异常的语句必须在try块中执行(在try块中调用的函数也可能抛出异常)。任何异常必须由紧跟在抛出异常的try语句之后的catch语句捕获。try和catch的一般
形式如下:
try{
// try block
}
catch(type1 arg){
//catch block

catch (type2 arg){
// catch block
}
catch(type3 arg){
// catch block

catch(typeN arg) {
// catch block

try块必须包括用户程序中监测错误的部分。它们可以短至函数中的几条语句,也可以是象try块(有效地监测整个程序)中main()函数的代码那样完全包装。异常发生时,由相应的catch语句去捕获并处理此异常。与一个try相关的catch语句可能不止一条。至于使用哪条catch语句,则由异常的类型决定。也就是说,如果由catch语句说明的数据类型与异常情况匹配,则此catch语句(其它catch语句跳过)执行。当捕获一个异常时,arg将接受它的值。可以捕获任何类型的数据,包括用户创建的类。如果try块中无异常(错误)发生,则不执行任何catch语句。
throw语句的一般形式如下:
throw exception;
throw必须在try块中或在try块中任何直接或间接调用的函数中执行。exception是被抛出的一个值。
如果对于抛出的异常没有合适的catch语句,则会发生程序异常终止。如果用户的编译程序符合建议的ANSI C++标准,那么抛出一个未被处理的异常会引起调用terminate()函数。缺省时,terminate()调用abort()终止用户程序,但如果用户愿意,则可以定义自己的终止处理程序。请参阅自己的编译程序库函数参考手册以了解详情。
下面的程序显示了C++异常处理操作的方法:
void func(float a,float b,float c){
    if(b==0)    
    {
        throw "Divided by zero";
    }
    c=a/b;
}
void func1(){
    
}
void func2(){
    
}
int main(int argc, char *argv[])
{
    float a=10;
    float b=0;
    float c=0;
    try{
        func(a,b,c);
        func1();
        func2();
    }catch(const char* str){
        cout<<str<<endl;
    }
    
    return 0;
}
try块中包含了三条语句和一个处理整型异常的catch(char *str)语句。在try块中,三条语句仅有两条会执行:第一条cout语句和throw语句。一旦有异常被抛出时,控制权转向catch语句,try块则被终止。也就是说,catch没有被调用,而只是将程序执行权转给它(程序栈在需要时自动复位)。因此,throw后的cout语句不会执行。
通常,catch语句中的代码试图通过适当的操作纠正错误。如果错误能够排除,catch语句后的程序继续执行。但通常有错误不能排除,则catch块将调用exit()或abort()以终止程序。

如上所述,异常的类型必须与catch语句说明的类型匹配

c++异常处理机制示例及讲解

原文链接:http://ticktick.blog.51cto.com/823160/191881 下面的代码直接贴到你的console工程中,可以运行调试看看效果,并分析c++的异常机制。 ...
  • u013727453
  • u013727453
  • 2015年04月24日 15:30
  • 1716

C++为什么要引入异常处理机制

1.异常处理的困难在程序设计中,错误时不可避免的。及时有效的发现错误,并作出适当的处理,无论是在软件的开发阶段还是在维护阶段都是至关重要的。错误修复技术是提高代码健壮性的最有效的方法之一。程序员往往忽...
  • K346K346
  • K346K346
  • 2015年11月28日 20:57
  • 1655

【VS开发】C++异常处理操作

异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 也许我们已经使用过异常,但是你会是一种习惯吗,不要老是想着当我打开一个文件的时候才用异常判断一下,我知道对你来说你喜欢...
  • LG1259156776
  • LG1259156776
  • 2016年05月21日 21:34
  • 1666

c++课件之异常处理

  • 2014年10月17日 17:56
  • 395KB
  • 下载

第12章 异常处理(郑莉 C++语言程序设计(第4版))

  • 2017年11月29日 21:55
  • 921KB
  • 下载

C++ Java异常处理比较

  • 2014年06月21日 21:12
  • 21KB
  • 下载

C与C++中的异常处理.pdf

  • 2011年02月09日 20:16
  • 555KB
  • 下载

C和C++ 异常处理

  • 2010年05月13日 00:24
  • 465KB
  • 下载

C与C++中的异常处理

  • 2010年02月27日 12:25
  • 464KB
  • 下载

c++异常处理

  • 2012年01月15日 00:17
  • 1.18MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++异常处理
举报原因:
原因补充:

(最多只允许输入30个字)