C++_异常3-异常机制throw try catch

下面介绍如何使用异常机制来处理错误。

C++异常是对程序运行过程中发生的异常情况的一种响应。

异常提供了将控制权从程序的一部分传递到另一部分的途径。

对异常的处理有3个组成部分:

1)引发异常  ----throw

2)使用处理程序捕获异常  ---- catch

3)使用try块。  ---- try

 

程序在出现问题时将引发异常,例如之前的hmean(),使之引发异常,而不是调用abort()函数。

throw()语句实际上是跳转,即命令程序跳到另一条语句。

throw关键字表示引发异常,紧随其后的值指出来异常的特征。

 

程序使用异常处理程序(exception handler)来捕获异常,异常处理程序位于要处理问题的程序中。

catch关键字表示捕获异常。

处理程序以catch关键字开头,随后是位于括号中的类型声明,它指出了异常处理程序要响应的异常类型;

然后是用花括号括起来的代码段,指出要采取的措施。

catch关键字和异常类型用作标签,指出当异常被引发时,程序应跳到这个位置执行。

异常处理程序也被称为catch块

 

try块标识其中特定的异常可能被激活的代码块,它后面跟一个或多个catch块。try块是由关键字try指示的。

关键字try的后面是一个由花括号括起来的代码块,表明需要注意这些代码引发的异常

 

了解这三个关键字是如何协同工作的,最简单的方法是看下面一个例子:

 1 //error3.cpp  -- using an exception
 2 #include <iostream>
 3 double hmean(double a, double b);
 4 
 5 int main()
 6 {
 7     double x,y,z;
 8     std::cout<<"Enter two numbers:";
 9     
10     while(std::cin>>x>>y)
11     {
12         try{
13             z = hmean(x,y);
14         }
15         catch (const char * s)
16         {
17             std::cout<< s << std::endl;
18             std::cout<< "Enter a new pair of numbers:";
19             continue;
20         }
21         std::cout<<"Harmonic mean of " << x << " and "<y
22                        << " is "<< z <<std::endl;
23     }
24     std::cout<<"Bye!\n";
25     return 0;
26 }
27 
28 double hmean(double a, double b)
29 {
30     if(a == -b)
31         throw  "bad hmean() arguments; a= -b not allowed";
32     return 2.0*a*b/(a+b);
33 }

 

上面那个程序,如果在try块中调用hmean(),将无法处理异常。

引发异常的语句:throw "bad hmean() arguments; a= -b not allowed"; 这个语句异常类型是字符串。

执行throw语句,类似于执行返回语句,因为它也将终止函数的执行;

但throw不是讲控制权返回给调用程序,而是将程序沿函数调用序列后退,直到找到包含try块的函数。

 

catch块类似于函数定义,但并不是函数定义。关键字catch表明这是一个处理程序,而 char * s 表明该处理程序与字符串的异常匹配。

s与函数参数定义极其类似,因为匹配的引发将被赋给s。

另外,当异常与该处理程序匹配时,程序将执行括号中的代码。

 

执行完try块后,如果没有引发任何异常,将跳过后面的catch块,直接执行处理程序后面的第一条语句。

 

这里可能有个疑问,如果函数引发了异常,而没有try块或者没有匹配的处理程序时,将会发生什么情况。

在默认情况下,程序最终会调用abort()函数,但可以修改这种行为。

 

转载于:https://www.cnblogs.com/grooovvve/p/10435102.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值