C++ 异常机制

  程序在运行的时候可能产生各种可预料到的异常,例如磁盘不足,内存不足,或是数学运算溢出,数组越界之类的。为了解决这些问题,C++提供了异常处理机制,它一般是由try语句和catch语句构成。

一、try和catch语句

  示例代码如下:

  

  首先我们定义了一个函数用于相除,假如被除数等于零就抛出异常。此时可以看到函数的定义后面多了一个throw(int)语句,这是用于强调此函数会抛出一个int类型的异常,当然不加也可能抛出各种类型。当我们输入b为零时,cal就会抛出0,而cal函数内并没有catch语句来捕捉异常,所以cal函数强行停止。cal函数抛出的异常在main函数中被catch语句捕捉到(注意到catch(int)表示捕捉int类型的抛出,另外,我们可以同时使用多个catch来捕捉多种类型的异常),于是会执行catch内的代码块。当然假若我们在cal函数中抛出的是一个double类型,那么main函数的catch就无法完成捕捉,程序会直接崩溃。也就是说,throw抛出的类型要和catch所能捕捉的类型一致。代码运行结果如下:

  

  假如我们连续调用了几个函数,当最底层函数抛出了异常,它会首先在自身中寻找catch语句的捕捉,如果不能完成捕捉就会将异常抛出到调用它的上一层的函数,如果依旧不能,则继续向上抛出,以此类推...,这个便是异常的栈展开:

  

二、异常类

  假如只是抛出一个int类型,我们只是知道有异常抛出,并不能知道更多的信息。但我们若只是抛出一个类的话,就可以在类中添加丰富的信息了。如以下代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 class myException{
 5     private:
 6         char* s;
 7     public:
 8         myException(char* _s){
 9             s = _s;
10         };
11         char* what(){
12             return s;
13         }
14
15
16 };
17 double cal(double a, double b){
18     if(b == 0) throw myException("b is 0");
19     if(a == 0) throw myException("a is 0");
20     return a / b;
21 }
22 int main(int argc, char const *argv[])
23 {
24     double a, b;
25     while(cin >> a >> b){
26         try{
27             cout << cal(a, b) << endl;
28         }
29         catch(myException &e){
30             cout << e.what() << endl;
31         }
32     }
33     return 0;
34 }

  我们定义了一个异常类,当产生异常时可以调用构造函数将异常信息传给数据成员s,然后被catch捕捉时可以调用成员函数what()来输出异常信息。程序运行结果如下:

  

  //End.

时间: 2024-10-21 04:42:11

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

异常机制

1. 异常机制       异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果.这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆:可读性降低,将程序代码与处理异常的代码混爹在一起:由调用函数的程序

第六章:异常机制

第六章:异常机制 异常的定义 异常:在程序运行过程中出现的意外事件,导致程序中断执行. 异常处理 try...catch 语法:try{ //可能出现异常的代码}catch(异常类型 异常对象名){ //处理异常的代码:}执行过程:当try中的代码异常发生时抛出一个异常对象,该异常对象与catch中异常类型进行匹配,匹配成功进入catch块,否则不执行catch中代码(相当于异常未被处理).程序只有当异常处理成功后才能继续执行. try...catch...catch 语法:try{ //可能出

C++ Primer笔记2_四种类型转换_异常机制

1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式执行的任何类型转换都可以由static_cast完成 当一个较大的算术类型赋值给较小的类型时,可以用static_cast进行强制转换. 可以将void*指针转换为某一类型的指针 可以将基类指针强制转换为派生类指针,但是不安全. 无法将const转化为nonconst,这个只有const_cast才可以办得到 举例:

Java的异常机制

一.什么是异常:非正常的,不同寻常的,不是语法错误. 生活中,医生说你身体某个部位异常,该部位和正常相比,有点不同功能可能受损. 张三开车去上班,正常情况下,顺利到达公司 非正常情况下,车子坏了,走路去公司 异常指的 不是语法错误 ,语法错误编译通不过,不会产生字节码文件,根本不能运行 程序中:代码出现错误,程序就会停止运行. 异常处理是衡量一门语言是否成熟的标准之一.主流的java c++ c# 都有异常处理机制. 异常处理可以让程序有更好的容错性,使代码更健壮. 传统的c语言是没有异常处理的

java 异常机制

浅谈java异常机制 下班闲来无事,看看java基础知识,做一下总结 异常机制:是java提供的一个解决突发事件或者误操作的一种控制流程的一种解决方案 Throwable 所有错误或者异常的超类,包含两个子类Error和Exection 其中Error错误是程序无法处理的,如内存溢出.机器断电等 Exception异常包括运行时异常和编译时异常 运行时异常类均继承RuntimeException,常见的如NullPointerException,ArithmeticException,Index

关于java中异常机制

什么是异常:异常就是程序在运行时出现的不正常情况.对于严重的情况Java通过Error类进行描述,一般不用编写代码处理:对于不严重的情况Java通过Exception描述,一般编写针对性代码对其进行处理. 异常由来:问题也是生活中一个具体的事物,也可以通过Java类的形式进行描述(比如进行运算时被除数不可以为0否则出现ArithmeticException异常,数组越界会出现ArrayIndexOutOfBoundsException等等),并封装成对象.即Java对不正常情况进行描述后的对象体

C++异常机制的实现方式和开销分析 (大图,编译器会为每个函数增加EHDL结构,组成一个单向链表,非常著名的“内存访问违例”出错对话框就是该机制的一种体现)

白杨 http://baiy.cn 在我几年前开始写<C++编码规范与指导>一文时,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了.没想到时隔几年以后才有机会把这个尾巴补完 :-). 还是那句开场白:“在恰当的场合使用恰当的特性” 对每个称职的 C++ 程序员来说都是一个基本标准.想要做到这点,就必须要了解语言中每个特性的实现方式及其时空开销.异常处理由于涉及大量底层内容,向来是 C++ 各种高级机制中较难理解和透彻掌握的部分.本文将在尽量少引入底层细节的前提下,讨论 C++ 中这一

C++ 异常机制分析(C++标准库定义了12种异常,很多大公司的C++编码规范也是明确禁止使用异常的,如google、Qt)

阅读目录 C++异常机制概述 throw 关键字 异常对象 catch 关键字 栈展开.RAII 异常机制与构造函数 异常机制与析构函数 noexcept修饰符与noexcept操作符 异常处理的性能分析 正文 回到顶部 C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统为程序设置当前异常对象,然后执行程序的当前异常处理代码块,在包含了异常出现点的

JAVA基础教程之JAVA异常机制

今天我们主要来说一说JAVA异常机制方面的内容.自设JAVA学习群457036818,大家可以交流一下 一. 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误.本文主要传授的是一些滚与Java语言的异常处理.Java语言的异常处理框架,是Java语言健壮性的一个重要体现. Java把异常当作对象来处理,而且定义一个基类java.lang.Throwable作为所有异常的超类.在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception.J

Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制

Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 二种方法: 1 3. 我们常接触到的异常包括: 2 4. ------代码 2 5. 参考 4 1. 语法错误(ERROR)和运行期错误(Exception) Javascript提供了两种特殊的错误处理方式 BOM包含一个onerror事件处理函数,这个window对象与图像对象上都有 同时EC