异常安全简例

异常是指存在于运行时的反常行为,典型的异常包括失去数据库的连接以及遇到意外的输入。

异常处理机制包括检测和处理这两个部分。

C++中通过throw 抛出异常,try主要是检测可能出现问题的部分,catch 用来捕异出现的异常并提供解决方案。

下面来看一个例子:输入两个整数,求商,并且当除数为0时异常。代码如下:

#include<iostream>
#include<stdexcept>

using namespace std;
int main()
{
#if 0
	int i,j;
	cin>>i>>j;
	cout<<i/j<<endl;
#else

	int i,j;

label:
	while (cin>>i>>j)
	{
		try{
				if(j==0)
					throw runtime_error("fail:divisor is 0");		
			}
		catch(runtime_error err)
		{
			cout<<err.what()<<"\ntry again? Enter y or n"<<endl;
			char c;
			cin>>c;
			if(c=='n')
				break;
			else
			{
				cout<<"entry two number:"<<endl;
				goto label;
			}
		}
		cout<< i/j <<endl;
	}
#endif
}

runtime_error是 stdexcept中定义的异常类 表示只有在运行时才检测出问题。

what( )是runtime_error类中的一个成员函数,返回值是初始化一个具体对象时所用的string对象的副本。

//其实以上的抛出异常之后用what()来接收,和线程结束时 pthread_exit(void * retval)的 retval能被线程回收 pthread_join( pthread_t thread , void **retval) 获取有点像,关于线程结束、回收的内容看笔者前面的文章即可。

上面的简例结果如下:

总结:本文用简单的例子介绍了 throw try catch 的用法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值