C++基础知识(4)---例外、异常处理

Java熟悉的朋友们都很清楚,java中的异常处理机制是非常完善的。并且java强制使用异常处理,用户必须对有可能出现异常的情况进行处理。

在C++中并没有强制用户使用异常处理,但是使用异常处理将会使您的程序更加的简健壮。

在C++中,一个函数在执行的过程中可以识别异常,并告诉异常的发生。这种通告机制称为 抛出异常 ,使用关键字throw。异常抛出后,可以由函数的调用者进行 捕捉 并进行处理,使用关键字catch .我们一般讲可能会抛出异常的程序块放到 try 语句中去执行,以便用 catch 来进行捕捉。

 1 try
 2 {
 3   f();   //f() 可能抛出一些异常
 4 }
 5
 6 catch(int a)
 7 {
 8    ............
 9 }
10 catch(int b)
11 {
12   .........
13 }

try 程序块可能会抛出异常,有catch 程序块来进行捕捉。catch 块之间的顺序可以任意,但是必须位于 try 之后,另外catch 块会将抛出的异常类型进行对比,如果匹配则进行捕捉

举一个例子

 1 #include <iostream>
 2 #include <string>
 3
 4 using namespace std;
 5
 6 void main()
 7 {
 8     string str;
 9     int index, length;
10     while (true)
11     {
12         cout << "please enter the index and length to erase:" << endl;
13         cin >>index>>length;
14         try
15         {
16             str.erase(index, length);
17         }
18         catch (out_of_range)
19         {
20             continue;
21         }
22         break;
23     }
24 }

如果输入的index大于字符串的长度将会引发一个异常out_of_range,即数组下标越界,这时异常就会被catch语句块捕捉到并进行处理。

(运行之后感觉这个程序有问题,结果总是不确定的,但还不到是什么问题。。。。。。。。。。)

时间: 2024-10-07 18:13:21

C++基础知识(4)---例外、异常处理的相关文章

java基础知识回顾之异常处理

异常处理机制 在程序运行的过程中难免会发生例外,例如除0溢出,数组越界和文件找不到等,一旦发生例外情况,将阻止程序的正常运行.为了将强程序的强壮性,必须考虑到可能发生的异常并能进行相应的处理. java通过面向对象的方法进行异常处理,一个方法在运行过程中,一旦发生了例外,就会产生一个异常对象,这一过程称为抛出,之后就会寻找相应的处理代码进行处理,这一过程称为捕获.如果没有找到,将会终止程序运行. java中的例外分为两类,分别是错误(Error)和异常(Exception).Error是指jav

《java基础知识》Java异常处理详解

1. Java 中的异常 前言:Java 中的异常处理是处理程序运行错误时的强大机制之一,它可以保证应用程序的正常流程. 首先我们将了解java异常.异常的类型以及受查和非受查异常之间的区别. 1.1 什么是异常? 字面意义:异常是一种不正常的情况. 在 java 中,异常是扰乱程序正常流程的事件,它是在程序运行时抛出的对象. 1.2 什么是异常处理? 异常处理一种在运行时解决程序错误的机制,例如 ClassNotFound.IO.SQL.Remote 等. 1.2.1 异常处理的优势 异常通常

基础知识《十一》Java异常处理总结

Java异常处理总结 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦! Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟

Java基础知识的三十个经典问答

Java基础知识的三十个经典问答 1.面向对象的特点 抽象: 抽象是或略一个主题中与当前目标的无关的因素,一边充分考虑有关的内容.抽象并不能解决目标中所有的问题,只能选择其中的一部分,忽略其他的部分.抽象包含两个方面:一是过程抽象:一是数据抽象. 继承 继承是一种联接类的层次模型,允许和鼓励类的重用,提供了一种明确的共性的方法.对象的一个新类可以从现有的类中派生,这叫做类的继承.心累继承了原始类 的特性,新类称为原始类的派生类或者是子类,原始类称为新类的基类或者父类.子类可以从父类那里继承父类的

IOS-OC的基础知识

IOS学习之路--OC的基础知识 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouch Media Core Services Core OS -------------------- System Framework OC的类声明,定义域 OC关键字定义为  @class O-C特有的语句for(..in ..)迭代循环,其他的条件和循环语句和c

沉淀,再出发:Java基础知识汇总

沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的语法,对象的定义,类.接口.继承.静态.动态.重载.覆盖这些基本的概念和使用方法,到稍微高级一点的多线程,文件读写,网络编程,GUI使用,再到之后的反射机制.序列化.与数据库的结合等高级一点的用法,最后将设计模式应用其中,产生了一个个新的概念,比如Spring.Spring MVC.Hibernat

多线程编程基础知识

多线程编程基础知识 http://www.cnblogs.com/cy163/archive/2006/11/02/547428.html 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.因此掌握

TCP/IP基础知识

最近工作中需要自己在板卡植入TCP/IP协议栈,因为毕竟单片机性能有限,完整的TCP/IP协议栈很庞大,所以只能移植经过简化的,本来已成功将LWIP协议栈移植到项目板卡中,但老大说这个协议栈写得过于繁琐,特别是在内存管理这块,不容易理解,而且我们板卡对数据的准确性要求没那么高,重点要保证能通就行,偶尔丢失一两个包都没关系,所以按此需求自写协议栈,实现UDP以及Telnet通信,目前UDP已经实现,其余功能还在慢慢增加中,通过这段时间的研究发现实现UDP并不难,最主要是要把网络通信的一些基本概念知

美国绿卡基础知识:I-539和I-129表格的应用回复新帖

美国绿卡基础知识:I-539和I-129表格的应用 发布于: 2011/07/25  8:43 am 引用 I-539,就是和万金油类似的表格.不管你是要延期,还是转换身份:不管你是 B-2 到 F-1,还是 H-1 到 F-2,通通都是它.它唯一不能做的就是,转到 H-1 去,或 H-1 的延期及换雇主.那是 I-129 的职责.来到美国之后,没有填过 I-539 表格的同学,恐怕是凤毛麟角.谁没有改过身份?F-2 改成 F-1 去读书,H-1 被 laid off 了 就 变成 H-4. 还

绿卡基础知识:I-129

绿卡基础知识:I-129 标签: 绿卡基础知识 I-129 表格本不该你来填的.那是你老板的 business.在美国工作,除非是公民或有绿卡,都需要移民局的批准.如果你没有 EAD,I-129 就是你的唯一之道.I-129 是雇主用来给受益人申请 E/H/L/O/P/Q etc 的,而同学们用得多的是 H-1B1.如果你是 DIY,请记住所有的签字包括 LCA,都得通过雇主.不要稀里糊涂偏进了 fraud. 申请 H-1B 有名额的限制(即所谓的 Reg Cap),每年是 65,000(其中