throw、try块和异常处理总结

一、标准库异常类

标准库异常类定义在四个头文件中:

1、exception头文件中定义了最常见的异常类,类名是exception,这个类只通知异常的产生,不会提供更多的信息

2、stdexcept头文件中定义了以下几个异常类:runtime_error, range_error, overflow_error, underflow_error, logic_error, domain_error, invalid_argument, length_error, out_of_range

3、new头文件中定义了bad_alloc异常类型

4、type_info头文件中定义了bad_cast异常类型

二、throw

throw后面跟一个变量(可以是异常类型变量或者是普通类型变量)或常量,所以不能写 throw runtime_error err("can‘t open file");

应该是
runtime_error err("can‘t open file");
throw err;
即先把err构造出来,然后throw。
throw runtime_error("can‘t open file");
runtime_error("can‘t open file")是 runtime_error异常类型的临时变量

三、try

try{
   程序的一部分;
} catch(异常类型  对象){
   处理异常程序
} ….

Try块以关键字try开始,后面是用花括号起来的语句序列块,try块后面是一个或多个catch子句,每个catch子句包括三部分:关键字catch,圆括号内单个类型或者单个对象的声明,以及通常用花括号括起来的语句块,一旦catch子句执行结束,程序流程立即继续执行紧跟随着最后一个catch子句的语句。
常常用err.what()返回提示用户,err是catch圆括号中定义的对象。

四、用法

举个例子先。
funA()
{
        //....
        while(...)
        {
                if(...)
                {

throw new exception;
                }

}

}
funB()
{
        funA();

}

int main()
{
        try{
                funB();

}
        catch(exception* e)
         {
                   //捕获到异常

}

}

在函数A中,由于某种原因抛出了一个异常,这不但会退出循环,同时还会退出整个A函数。由于调用A函数的B没有捕获这个异常,因此B也要退出。异常继续往上传递,现在到了main函数,它里面使用try-catch捕获到了这个异常,因此进入了catch代码块。

简而言之就是 throw一个异常会退出这个函数的调用堆栈,直到其上级堆栈有捕获为止,如果都没有捕获,那么程序退出。

#include <iostream> //包含头文件
#include <cstdlib>
#include <stdexcept>

using namespace std;

double fuc(double x, double y) //定义函数
{
  if(y == 0)
  {
    throw y; //除数为0,抛出异常,此时异常类型是double
  }
  return x / y; //否则返回两个数的商
}

int main()
{
  double res;
  try //定义异常
  {
    res = fuc(2,3);
    cout << "The result of x/y is : " << res << endl;
    res = fuc(4,0); //出现异常
  }
  catch(double) //捕获并处理异常
  {
    cerr << "error of dividing zero.\n";
    exit(1); //异常退出程序
  }
  catch(runtime_error err)
  {
    cout << err.what() << endl;
  }

  return 0;
}

时间: 2024-09-28 09:23:27

throw、try块和异常处理总结的相关文章

浅谈Java throw, throws, try catch异常处理

1.throws关键字通常被应用在声明方法时,用来指定可能抛出的异常.多个异常可以使用逗号隔开.当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象.如下面例子所示: public class Shoot {   创建类 static void pop() throws NegativeArraySizeException { //定义方法并抛出NegativeArraySizeException异常 int [] arr = new int[-3];//创建数组 } public

C++异常处理 - try,catch,throw,finally的用法

写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使用过异常,但是你习惯使用异常了吗? 现在很多软件都是n*365*24小时运行,软件的健壮性至关重要. 内容导读 本文包括2个大的异常实现概念:C++的标准异常和SHE异常. C++标准异常: 也许你很高兴看到错误之后的Heap/Stack中对象被释放,可是如果没有呢? 又或者试想一下一个能解决的错误

PHP的错误和异常处理

PHP的错误和异常处理 任何程序员在开发时都可能遇到过一些失误,或其他原因造成错误的发生.当然,用户如果不愿意或不遵循应用程序的约束,也会在使用时引起一些错误发生.PHP程序的错误发生一般归属于下列三个领域. Ø  语法错误 语法错误最常见,并且最容易修复.例如,遗漏了一个分号,就会显示错误信息.这类错误会阻止脚本执行.通常发生在程序开发时,可以通过错误报告进行修复,再重新运行. Ø  运行时错误 这种错误一般不会阻止PHP脚本的运行,但是会阻止脚本做希望它所做的任何事情.例如,在调用heade

黑马程序员——————&gt; 异常处理之修复

------- android培训.java培训.期待与您交流! ---------- java的异常机制主要依赖于try, catch, finally, throw, throws五个关键字,其中try关键字后紧跟一个花括号扩起来的代码块,简称try块,它里面放置可能引发异常的代码.catch后对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块.多个catch块后还可以跟一个finally块,finally块用于回收在try块里打开的物理资源,异常机制会保证finall

PHP 异常处理

PHP 异常处理 异常用于在指定的错误发生时改变脚本的正常流程. 异常是什么 PHP 5 提供了一种新的面向对象的错误处理方法. 异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. 当异常被触发时,通常会发生: 当前代码状态被保存 代码执行被切换到预定义(自定义)的异常处理器函数 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本 我们将展示不同的错误处理方法: 异常的基本使用 创建自定义的异常处理器 多个异常 重

PHP异常处理详解

PHP异常处理详解 异常处理(又称为错误处理)功能提供了处理程序运行时出现的错误或异常情况的方法. 异常处理通常是防止未知错误产生所采取的处理措施.异常处理的好处是你不用再绞尽脑汁去考虑各种错误,这为处理某一类错误提供了一个很有效的方法,使编程效率大大提高.当异常被触发时,通常会发生:          当前代码状态被保存         代码执行被切换到预定义的异常处理器函数          根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚

关于 Java 中 finally 语句块的深度辨析

可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机.接下来我就带您一步一步的揭开这个 finally 的神秘面纱. 问题分析 首先来问大家一个问题:finally 语句块一定会执行吗? 很多人都认为 finally 语句块是肯定要执行的,其中也包括一些很有经验的 Java 程序员.可惜并不像大多人所认为的那样,对于这个问题,答案当然是否定的,我们先来看下面这个例子. 清单 1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1

小议C#错误调试和异常处理

在程序设计中不可避免地会出现各种各样的错误,在编写代码时须要尽量避免. 在处理错误时,首先应该分析错 误的类型,找出出错的原因才干解决错误. 错误的分类 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmd6aWppZWppYXlvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 错误处理 一.错误处理有两种类型例如以下: 1.调

.NET中异常处理的最佳实践(转)

原文地址:http://www.cnblogs.com/xiaozhi_5638/p/4259115.html 目录 介绍 做最坏的打算 提前检查 不要信任外部数据 可信任的设备:摄像头.鼠标以及键盘 “写操作”同样可能失效 安全编程 不要抛出“new Exception()” 不要将重要的异常信息存储在Message属性中 每个线程要包含一个try/catch块 捕获异常后要记录下来 不要只记录Exception.Message的值,还需要记录Exception.ToString() 要捕获具