C++异常 异常机制

C++异常是丢程序运行过程中发生的异常情况(例如被0除)的一种响应。异常提供了将控制权从程序的一个部分传递到另一部分的途径。对异常的处理有3个组成部分:
* 引发异常;
* 使用处理程序捕获异常;
* 使用try块。
程序在出现问题时将引发异常。throw语句实际上是跳转,即命令程序跳到另一条语句。throw关键字表示引发异常,紧随其后的值(例如字符串或对象)指出了异常的特征。
程序使用异常处理程序(exception handler)来捕获异常,异常处理程序位于要处理问题的程序中。catch关键字表示捕获异常。处理程序以关键字catch开头,随后是位于括号中的类型声明,它指出了异常处理程序要响应的异常类型;然后一一个用花括号括起的代码块,指出要采取的措施。catch关键字和异常类型用作标签,指出当异常被引发时,程序应跳到这个位置执行。异常处理程序也被称为catch块。
try块标识其中特定的异常可能被激活的代码块,它后面跟一个或多个catch块。try块是由关键字try指示的,关键字try的后面是一个由花括号括起的代码块,表明需要注意这些代码引发的异常。
要了解这3个元素是如何协同工作的,最简单的方法是看一个简短的例子,如下。
error3.cpp

// error3.cpp -- using an exception
#include <iostream>
double hmean(double a, double b);

int main()
{
    double x, y, z;

    std::cout << "Enter two numbers: ";
    while (std::cin >> x >> y)
    {
        try {
            z = hmean(x,y);         // start of try block
        }                           // end of try block
        catch (const char * s)      // start of exception handler
        {
            std::cout << s << std::endl;
            std::cout << "Enter a new pair of numbers: ";
            continue;
        }
        std::cout << "Harmonic mean of " << x << " and " << y
                  << " is " << z << std::endl;
        std::cout << "Enter next set of numbers <q to quit>: ";
    }
    std::cout << "Bye!\n";
    return 0;
}

double hmean(double a, double b)
{
    if (a == -b)
        throw "bad hmean() arguments: a = -b not allowed";
    return 2.0 * a * b / (a + b);
}

效果:

Enter two numbers: 3 6
Harmonic mean of 3 and 6 is 4
Enter next set of numbers <q to quit>: 10 -10
bad hmean() arguments: a = -b not allowed
Enter a new pair of numbers: 1 19
Harmonic mean of 1 and 19 is 1.9
Enter next set of numbers <q to quit>: q
Bye!

出现异常时的程序流程:
1.程序在try块中调用hmean()。
2.hmean()引发异常,将从而执行catch块,并将异常字符串付给s。
3.catch块返回到while循环的开始为值。

时间: 2024-10-14 09:05:53

C++异常 异常机制的相关文章

异常捕获机制

在写代码的时候最怕代码写了几百上千行,可是一运行程序就崩溃:为了提高代码的健壮性,下面提供一种提高代码健壮性的方式: 异常捕获机制 1 // 异常捕获机制:提高代码的健壮性 2 @try---@catch---@finally 下面以一个打印数组的小Demo说明其用法 1 NSArray *arr = @[@10, @20, @30]; 2 @try { 3 /* 将有可能出问题导致程序崩溃的代码放在try语句体中 */ 4 NSLog(@"arr[3] = %@",arr[3]);

用c实现跨平台异常捕获机制

TBOX封装了一套跨平台的异常捕获实现,来模拟windows的seh异常处理功能,而且是线程安全的. 在linux/mac下的实现 使用signal 捕获异常信号 使用sigsetjmp保存现场寄存器和信号掩码,出现异常后使用 siglongjmp 跳转到异常处理过程,并恢复状态 使用线程局部存储维护 sigjmpbuf 寄存器现场状态堆栈,保证多线程安全,并且可以实现多层嵌套捕获处理. 在windows下的实现 这个就不用多说了,在vs下直接用 try.except 关键字就行了,如果在min

【 转】__try,__except,__finally,__leave异常模型机制

转自:http://blog.csdn.net/wwl33695/article/details/8686458 导读: 从本篇文章开始,将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型.主人公阿愚将在这里与大家分享SEH( 结构化异常处理)的学习过程和经验总结. 深入理解请参阅<<windows 核心编程>>第23, 24章. SEH实际包含两个主要功能:结束处理(terminatio

程序有异常不知道咋办?来学习Java异常处理知识点和异常链机制

Java异常处理知识点和异常链机制异常处理是程序设计中一个非常重要的方面,毕竟人无完人,不可能永不犯错,程序中有异常是很正常的, Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,下面是我对Java异常知识和异常链的一个总结.一.Java异常的基础知识异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.有些异常需要做处理,有些则不需要捕获处理,在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免.不可预测的情况则在考虑异常发生时如何处理.J

异常+异常链

异常: 在程序运行过程中发生的不正常事件 Java中所有异常都是Exception(父类) 传统处理程序中异常: System.exit(1);参数必须为非0数,结束/退出JVM(java虚拟机) System.err.println();控制台输出错误流,为红色字体. 异常处理机制: 为程序提供错误处理的能力 5个关键字: try 执行可能产生异常的代码 catch 捕获异常 finally 无论是否发生异常,代码都能执行 throw 声明异常,声明方法可能要抛出的各种异常 thorws 手动

-1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常

异常 异常:异常就是Java程序在运行过程中出现的错误. 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象. 其实就是Java对不正常情况进行描述后的对象体现. Throwable |--Error        严重问题,我们不处理. |--Exception |--RuntimeException        运行期异常,我们需要修正代码 |--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过 Exception和

C++‘异常’处理机制

在C++的发展过程中,为了实际的需要,引入了异常处理机制.程序中常见的错误:语法错误和运行错误,语法错误一般都是在编译时候发现的,编译器基本上都会报出错误的具体位置,因此这类错误一般都是比较好修改,运行错误一般不容易进行调试,比如说,程序崩溃(一般是由于栈溢出),运行结果错误(一般是算法的逻辑结构有问题).程序非正常终止等现象.C++中引入异常处理(对运行时出现的差错进行处理),能够极大地提高程序的容错能力. C++处理异常是利用try(检查).throw(抛出).catch(捕捉)三部分来进行

第三方接口调用异常补偿机制实现实例记录

背景: 我们的组件(简称A),在业务链中属于数据支撑节点.其中与组件B存在接口同步数据的直接关系(API接口直接调用进行数据交互) 问题: 我们的上游有另一个组件C(带有界面),调用A(us)进行数据的变更操作,此时需要A调用B服务接口进行同步,问题出在这里,C调用 A通常速度比较快,比较稳定,但是A调用B经常超时或者失败,网络原因or 组件B自己的设计原因吧,反正是推不动 方案:经沟通考察,这条数据的变更在可接受的时间范围只要最终一致即可,于是首先,我们先将事物中的调用B服务的一系列逻辑抽出来

C#基础知识点之try catch 异常捕获机制

一.C#的异常处理所用到关键字 try 用于检查发生的异常,并帮助发送任何可能的异常. catch 以控制权更大的方式处理错误,可以有多个catch子句. finally 无论是否引发了异常,finally的代码块都将被执行. throw 用于引发异常,可引发预定义异常和自定义异常. 二.C#异常处理的格式 try { 程序代码块: } catch(Exception e) { 异常处理代码块: } finally { 无论是否发生异常,均要执行的代码块: } 三.异常处理实战 一个除数和零的简

C#中的异常捕获机制(try catch finally)

一.C#的异常处理所用到关键字 try :用于检查发生的异常,并帮助发送任何可能的异常. catch :以控制权更大的方式处理错误,可以有多个catch子句.  finally: 无论是否引发了异常,finally的代码块都将被执行.  throw: 用于引发异常,可引发预定义异常和自定义异常. 二.C#异常处理的格式 1 try 2 { 3 //程序代码块: 4 } 5 catch(Exception e) 6 { 7 //异常处理代码块: 8 } 9 finally 10 { 11 //无论