当前位置:  编程技术>c/c++/嵌入式

C++之异常处理详解

    来源: 互联网  发布时间:2014-10-19

    本文导语:  程序中的错误分为编译时的错误和运行时的错误。编译时的错误主要是语法错误,比如:句尾没有加分号,括号不匹配,关键字错误等,这类错误比较容易修改,因为编译系统会指出错误在第几行,什么错误。而运行时的错误...

程序中的错误分为编译时的错误和运行时的错误。编译时的错误主要是语法错误,比如:句尾没有加分号,括号不匹配,关键字错误等,这类错误比较容易修改,因为编译系统会指出错误在第几行,什么错误。而运行时的错误则不容易修改,因为其中的错误是不可预料的,或者可以预料但无法避免的,比如内存空间不够,或者在调用函数时,出现数组越界等错误。如果对于这些错误没有采取有效的防范措施,那么往往会得不到正确的运行结果,程序不正常终止或严重的会出现死机现象。我们把程序运行时的错误统称为异常,对异常处理称为异常处理。C++中所提供的异常处理机制结构清晰,在一定程度上可以保证程序的健壮性。

C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的函数来解决,上一级解决不了,再传给其上一级,由其上一级处理。如此逐级上传,直到最高一级还无法处理的话,运行系统会自动调用系统函数terminate,由它调用abort终止程序。这样的异常处理方法使得异常引发和处理机制分离,而不在同一个函数中处理。这使得底层函数只需要解决实际的任务,而不必过多考虑对异常的处理,而把异常处理的任务交给上一层函数去处理。

C++的异常处理机制有3部分组成:try(检查),throw(抛出),catch(捕获)。把需要检查的语句放在try模块中,检查语句发生错误,throw抛出异常,发出错误信息,由catch来捕获异常信息,并加以处理。一般throw抛出的异常要和catch所捕获的异常类型所匹配。异常处理的一般格式为:

代码如下:

  try
  {
    被检查语句
    throw 异常
  }
  catch(异常类型1)
  {
    进行异常处理的语句1
  }
  catch(异常类型2)
  {
    进行异常处理的语句2
  }
  ...

下面我们用示例演示一下异常处理:
代码如下:

#include "stdafx.h"
#include
template
T Div(T x,T y)
{
if(y==0)
throw y;//抛出异常
return x/y;
}
int main()
{
int x=5,y=0;
double x1=5.5,y1=0.0;
try
    {
//被检查的语句
        std::cout

    
 
 

您可能感兴趣的文章:

  • C++中的Python字符串处理 pyString
  • C++图像处理库 ImageStone
  • C++信号处理库 SP++
  • C++命令行参数处理库 tclap
  • C++图像处理库 Pandore
  • C++的XML处理库 Xemeiah
  • C++多媒体处理库 libCVD
  • 医学影像处理与分析 MITK C++
  • C++的音频处理框架 GNU ccAudio2
  • C++图像处理库 ExactImage
  • C++的XML处理器 CMarkup
  • c++中怎么写sigaction()中的信号处理函数
  • 通过JNI在C++中怎样处理一个jchararray.......
  • 数学、信号处理、通讯类C++库 IT++
  • 轻量级 C++ 的 XML 处理库 pugixml
  • C++的try块与异常处理及调试技术实例解析
  • 深入分析C++中执行多个exe文件方法的批处理代码介绍
  • c++中template对字符串的处理方法
  • C++算法之海量数据处理方法的总结分析
  • Linux 下 C++程序的异常处理技巧
  • MySQL数据入库时特殊字符处理详解
  • Sql Server使用cursor处理重复数据过程详解
  • php事务处理实例详解
  • 深入Android SQLite 事务处理详解
  • C#异常处理详解
  • 解析jdbc处理oracle的clob字段的详解
  • C#处理JPEG头信息的实例详解
  • PHP图片处理类 phpThumb参数用法详解
  • 深入分析C#中处理和键盘相关事件的详解
  • php中pdo错误处理方法详解
  • 解析使用jdbc,hibernate处理clob/blob字段的详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c/c++预处理命令预#error介绍
  • c/c++预处理命令预#error介绍 iis7站长之家
  • c/c++预处理命令预#undef介绍
  • 如何让批处理文件执行完毕后窗口不关闭,批处理文件直接点击执行
  • c/c++预处理命令预#pragma介绍
  • 视频处理问题,用批处理对视频进行打码
  • c/c++预处理命令预#line介绍
  • 请问如何在unix批处理中得到批处理参数!read吗?急在线等待!
  • c/c++预处理命令预#include介绍
  • 在linux上怎么编写一个模块来提供某个中断的中断处理程序呢?而且有哪些中断可以自己添加中断处理程序呢?
  • Python 3 Tkinter教程之事件Event绑定处理代码实例
  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • c/c++预处理命令预#,##使用介绍
  • 我想编一个把javac和java连起来用的批处理文件,请批处理文件中的参数怎么表示?
  • c/c++预处理命令预#if, #ifdef, #ifndef, #else, #elif, #endif介绍
  • 为何信号处理没有及时被处理呢?
  • c/c++预处理命令预#define语法和例子
  • 在编写驱动程序的时候,timer处理中,遇到了其他某timer处理例程以外的代码的执行。请指点,各位
  • c/c++预处理命令之预定义变量
  • 我准备做个批处理文件来删除某文件夹下后缀为Txt的文件,可系统一次执行不完,还要手动敲一个回车,怎么处理?
  • Python异常处理基础知识
  • 批量处理JDBC语句提高处理速度




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3