C++笔记(8):C++异常处理

                    异常处理

  C++异常处理机制是一个用来有效地处理运行错误的非常强大且灵活的工具,它提供了更多的弹性、安全性和稳固性,克服了传统方法所带来的问题.
    异常的抛出和处理主要使用了以下三个关键字: try、 throw 、 catch 。
try语句
  try代码块由关键字try以及后面的一对大括号组成,大括号中定义的代码块,就是可能出现异常的代码。try代码块中包含了可能引起异常的语句以及发生异常时应该跳过的语句。(也就是可能引起异常的函数以及没有异常发生时应该执行的语句)。异常可能是由try代码块中的代码直接导致的,也可能是由于调用其它函数导致的,还有可能是由于try代码块中的代码所发起的深层嵌套函数调用所导致的。 
catch语句 
  异常是由catch处理器处理的,他会捕获并处理异常。在每个try代码块之后,必须至少紧挨着一个catch处理器。每个catch处理器都以关键字catch开始,并在一对圆括号中指定一个异常参数(exception parameter),表示它能够处理的异常的类型(DivideByZeroException)。当try代码块发生异常时,就会执行异常参数的类型与这个异常匹配的那个catch处理器(即catch代码块的类型与被抛出的异常类型准确对应,或者是他的基类)。如果异常参数包含可选的参数名,则catch处理器可以使用这个参数名与catch处理器代码体重被捕获的异常交互。
throw语句
     throw语句用来主动抛出异常。如果在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛出了该异常,则这个异常就可以被try语句块后的某个catch语句所捕获并处理,捕获和处理的条件是被抛弃的异常的类型与catch语句的异常类型相匹配。由于C++使用数据类型来区分不同的异常,因此在判断异常时,throw语句中的表达式的值就没有实际意义,而表达式的类型就特别重要。
 
异常处理的一般格式为:
  try
  {
    //被检查语句
    throw 异常;
  }
  catch(异常类型1)
  {
    //进行异常处理的语句1
  }
  catch(异常类型2)
  {
    //进行异常处理的语句2
  }
    catch(...)//捕获所有的异常
   {
   }
在异常匹配的时候,只对类型进行匹配,不关心抛出的异常对象的值。
 
 异常的类型
(1)可以抛出基本数据类型异常,如int和char等; 
(2)可以抛出复杂数据类型异常,如结构体(在C++中结构体也是类)和类; 
(3)C++的异常处理必须由调用者主动检查。一旦抛出异常,而程序不捕获的话就会导致程序异常终止。
 
注意事项
(1)try和catch块中必须要用花括号括起来,即使花括号内只有一个语句也不能省略花括号;
(2)try和catch必须成对出现,一个try_catch结果中只能有一个try块,但可以有多个catch块,以便与不同的异常信息匹配;
(3)如果在catch块中没有指定异常信息的类型,而用删节号"...",则表示它可以捕获任何类型的异常信息

(4)C++中一旦抛出一个异常,如果程序没有任何的捕获,那么系统将会自动调用一个系统函数terminate,由它调用abort终止程序
(5)构造函数内可以抛出异常,析构函数内不要抛出异常。
 
标准异常对象的类型
在C++标准库中,有些函数抛出特定的异常,而另外一些根本不抛任何异常。
因为C++标准中没有明确规定,所以C++的库函数可以抛出任何对象或不抛。

但C++标准推荐运行库的实现通过抛出定义在<stdexecpt>中的异常类型或其派生类型来报告错误:
      class logic_error;      
      class domain_error;    
      class invalid_argument; 
      class length_error;     
      class out_of_range;   
       class runtime_error;       
      class range_error;  
      class overflow_error;
      class underflow_error;

时间: 2024-11-12 13:42:23

C++笔记(8):C++异常处理的相关文章

SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理

SpringMVC的异常处理,SimpleMappingExceptionResolver只能简单的处理异常 当发生异常的时候,根据发生的异常类型跳转到指定的页面来显示异常信息 ExceptionController.java 处理器 package com.orange.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.Requ

Struts2-学习笔记系列(8)-异常处理

后台抛出自定义异常 1 public String execute() throws Exception { 2 3 if (getUser().equalsIgnoreCase("user")) 4 { 5 throw new ZcxException("自定义异常"); 6 } 7 if (getUser().equalsIgnoreCase("sql")) 8 { 9 throw new java.sql.SQLException(&quo

Java编程思想笔记(通过异常处理错误)

1.概念 2.基本异常:异常情形是指阻止当前方法或作用域继续执行的问题. 2(1).异常参数:所有标准异常类都有两个构造器:一个是默认构造器:另一个是接受字符串作为参数,以便能把相关信息放入异常对象的构造器. 3.捕获异常 3(1).try块:如果在方法内部抛出了异常,这个方法将在抛出异常的过程中结束.要是不希望方法就此结束,可以在方法内设置一个特殊的块来捕获异常.因为在这个块里“尝试”各种(可能产生异常的)方法调用,所以称为try块 3(2).异常处理程序:异常处理理论上有两种基本模型.终止模

Java学习笔记-6.Java异常处理

一.异常简介 1.异常:程序在运行过程中有时会出现一些意外的情况导致程序退出的情况 2.一个异常是由一个对象来表示的,所有的异常都直接或间接地继承自Throwable接口 Throwable接口是类库java.lang包中的一个类,它派生出两个子类:Error 和 Exception (1)Error类主要用来描述一些Java运行时系统内部的错误或资源枯竭导致的错误,此类错误一般由系统进行处理,一般程序本身不需要捕获和处理 (2)Exception类分为RuntimeException异常 和

python学习笔记8:异常处理

一.异常处理 在程序运行过程中,总会遇到各种各样的错误. 程序一出错就停止运行了,那我们不能让程序停止运行吧,这时候就需要捕捉异常了,通过捕捉到的异常,我们再去做对应的处理. 如下,写段代码,取字典里的值,当字典的key不存在的时候,会报错 那么,我们给可能出错的代码  print(dic[choice])  进行异常捕捉 二.常见的异常信息

Java基础学习笔记十八 异常处理

什么是异常?Java代码在运行时期发生的问题就是异常. 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 异常的继承体系 在Java中使用Exception类来描述异常. 查看API中Exception的描述,Exception 类及其子类是 Throwable 的一种形式,它用来表示java程序中可能会产生的异常,并要求对产生的异常进行合理的异常处理. Exception有继承关系,它的父类是Throwable.Thr

Java读书笔记一(异常处理)

1.介绍 在开发过程中,都会遇到程序运行时的异常,例如逻辑错误.硬件故障等,本篇博客将会详细的介绍一下Java中的异常处理机制. 2.Try和Catch捕获异常 我们在处理异常过程中经常用到的就是Try和Catch语句了.try语句块能够指出可能出现的异常,随后通过一个或者多个Catch语句块来捕获. 2.1.简单的Try和Catch语法 package com.RuntimeException; public class Sample11_1 { public static void main

Android笔记九.Intent异常处理及常用系统调用

Intent异常处理及常用系统调用 Jiangdg_VIP http://blog.csdn.net/u012637501 一.Intent异常处理 当Intent对象启动组件或应用时,会由于组件的设置错误或者应用没有安装会导致异常.一般来说,应用出现异常后会异常退出.因为,为了不影响我们开发的应用程序正常使用,可以通过try....catch方法来处捕获异常或者捕获一个指定的异常,在异常处理模块作相应的处理(比如Toast提示).如下所示: try { Intent intent=new In

SpringMVC学习笔记五:HandlerExceptionResolver异常处理

继承HandlerExceptionResolver自定义异常处理器 控制器ExceptionController.java package com.orange.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.Mode

Python学习笔记整理(十七)异常处理

一.异常基础 try/except:捕捉由代码中的异常并恢复,匹配except里面的错误,并自行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行try语句后面的程序) try/finally: 无论异常是否发生,都执行清理行为 (发生异常时程序会中断程序,只不过会执行finally后的代码) raise: 手动在代码中接触发异常. assert: 有条件地在程序代码中触发异常. with/as 在Python2.6和后续版本中实现环境管理器