21.C++中处理异常的语法形式是什么?

 我来答
mzzbqzbq
2015-01-01 · TA获得超过14.1万个赞
知道大有可为答主
回答量:1万
采纳率:73%
帮助的人:1800万
展开全部
异常处理允许用户以一种有序的方式管理运行是出现的错误。使用C++的异常处理,用户程序在错误发生时可自动调用一个错误处理程序。异常处理最主要的优点是自动转向错误处理代码,而以前在大程序中这些代码是由“手工”编制的。
注:异常处理不属于C++原始规范的范畴。它是在1983年间发展起来的。异常处理由建
议的ANSI C++标准定义,被现存大多数C++编译程序所支持。

C++异常处理建立在三个关键字基础之上:try、catch和throw。
通常,监测异常情况的程序语句包含在try中。如果try块中发生了异常(也就是错误),则用throw处理。异常由catch捕获,并得到处理。
下面详细讨论这些论点。
抛出异常的语句必须在try块中执行(在try块中调用的函数也可能抛出异常)。任何异常必须由紧跟在抛出异常的try语句之后的catch语句捕获。
try和catch的一般形式如下:
try{
// try block
}
catch(type1 arg){
//catch block

catch (type2 arg){
// catch block
}
catch(type3 arg){
// catch block

catch(typeN arg) {
// catch block

try块必须包括用户程序中监测错误的部分。它们可以短至函数中的几条语句,也可以是象try块(有效地监测整个程序)中main()函数的代码那样完全包装。
异常发生时,由相应的catch语句去捕获并处理此异常。与一个try相关的catch语句可能不止一条。至于使用哪条catch语句,则由异常的类型决定。也就是说,如果由catch语句说明的数据类型与异常情况匹配,则此catch语句(其它catch语句跳过)执行。当捕获一个异常时,arg将接受它的值。可以捕获任何类型的数据,包括用户创建的类。如果try块中无异常(错误)发生则不执行任何catch语句。
throw语句的一般形式如下:
throw exception;
throw必须在try块中或在try块中任何直接或间接调用的函数中执行。exception是被抛出的一个值。
如果对于抛出的异常没有合适的catch语句,则会发生程序异常终止。如果用户的编译程序符合建议的ANSI C++标准,那么抛出一个未被处理的异常会引起调用terminate()函数。缺省时,terminate()调用abort()终止用户程序,但如果用户愿意,则可以定义自己的终止处理程序。
下面的程序显示了C++异常处理操作的方法:
// A simple exception handling example.
#include<iostream.h>
main()
{
cout<<"start/n";
try{// start a block
cout<<"Inside try block/n";
throw 100;//throw an error
cout<<"This will not execute";

catch(int i){//catch an error
cout <<"Caught an exception--value is :";
cout<<i<<"/n";
}
cout<<"End";
return 0;
}
程序显示下面结果:
Start
Inside try block
Caught an exception-- value is: 100
End
仔细阅读上述程序会发现,try块中包含了三条语句和一个处理整型异常的catch(int i) 语句。在try块中,三条语句仅有两条会执行:第一条cout语句和throw语句。一旦有异常被抛出时,控制权转向catch语句,try块则被终止。也就是说,catch没有被调用,而只是将程序执行权转给它(程序栈在需要时自动复位)。因此,throw后的cout语句不会执行。通常,catch语句中的代码试图通过适当的操作纠正错误。如果错误能够排除,catch语句后的程序继续执行。但通常有错误不能排除,则catch块将调用exit()或abort()以终止程序。
异常的类型必须与catch语句说明的类型匹配。在上面的例子中,如果将catch语句中的数据类型改为double型,就不能捕获异常情况,会发生异常终止。示例如下:
// This example will not work.
#include<iostream.h>
main()
{
cout<<"start/n";
try{ // start a try block
cout<<"Inside try block/n";
throw 100;// throw an error
cout <<"this will execute";

catch (double i ){// Won’t work for an int exception
cout<<"Caught an exceptyon--value is :";
cout<<i<<"/n";

cout<<"End";
return 0;
}
因为整型异常不能由catch(double i)语句捕获,所以程序产生如下结果:
start
Inside try block
威孚半导体技术
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层... 点击进入详情页
本回答由威孚半导体技术提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式