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

     对java熟悉的朋友们都很清楚,java中的异常处理机制是非常完善的。并且java强制使用异常处理,用户必须对有可能出现异常的情况进行处理。在c++中并没有强制用户使用异常处理,但是使用异常处理将会使您的程序更加的健壮。

     在c++中,一个函数在执行的过程中可以识别异常(例外),并通告异常的发生。这种通告机制称为抛出异常,使用关键字throw。异常抛出后,可以由函数的调用者进行捕捉并进行处理,使用关键字catch。我们一般将可能会抛出异常的程序块放到try语句块中去执行,以便用catch来进行捕捉。个人感觉c++中异常处理的这一套和java非常相似,都是try{......}catch(..){......}这种结构。下面看一个例子:

try
{
     f();//f() may throw some exception
}
catch(int a)
{
     ......
}
catch(char b)
{
     ......
}


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

     举一个具体的例子:
     while(true)
     {
          cout << "please enter the index and length to erase:"<<endl;
          cin >>index>>length;
          try
          {
               str.erase(index,length);
          }
          catch(out_of_range)
          {
               continue;
          }
          break;
     }



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

     下面用一个例子演示如何抛出异常:

const int MaxSize = 1000;
float arr[MaxSize];
enum out_of_bounds{underflow,overflow};

float& access(int i)
{
	if(i<0)
	{
		throw underflow;
	}
	if(i>=MaxSize)
	{
		throw overflow;
	}
}

try
{
	......
	val = access(k)
}
catch(out_of_bounds t)
{
	if(t==overflow)
	{
		cerr<<"overflow"<<endl;
		exit(EXIT_FAILURE);
	}
	if(t==underflow)
	{
		cerr<<"underflow"<<endl;
		exit(EXIT_FAILURE);
	}
}


由try语句块抛出异常,catch语句块进行捕捉后进行分析是什么异常,然后进行处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值