博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android NDK开发之旅23 C++ 异常处理
阅读量:6938 次
发布时间:2019-06-27

本文共 1715 字,大约阅读时间需要 5 分钟。

###异常处理

与Java类似,C++也有异常处理。

###异常类型

C++中,异常的类型是任意的,如下:

void main(){		try{		//throw 1;		//throw "异常信息";		throw 9.8;	}	catch (int a){		cout << "int异常:" << a << endl;	}	catch (char* s){		cout << "char*异常:" << s << endl;	}	catch (...){		cout << "未知异常"<< endl;	}	system("pause");}复制代码

throw不同类型的异常,就会在相应的catch块里面捕获到。其中...能够捕获所有类型的异常,catch有先后,如果先捕获到异常,后面的catch块就不会执行了。

###不断向外抛出

异常在函数里面抛出的话,可以一层一层往外抛出,如果最终没有catch到的,程序就会停止。我们可以在函数定义的时候声明抛出的异常的类型列表。

void fun1() throw(char*){	throw "我是一个异常";}void main(){	try{		fun1();	}	catch (char* s){		cout << "char*异常:" << s << endl;	}	system("pause");}复制代码

###C++标准异常与自定义异常

C++提供了一系列标准的异常类,例如下面的out_of_range:

#include 
void fun1() throw(out_of_range){ throw out_of_range("超出范围");}void main(){ try{ fun1(); } catch (out_of_range err){ cout << "out_of_range异常:" << err.what() << endl; } system("pause");}复制代码

我们也可以自定义异常:

自定义的异常需要继承exception类。

class MyException :public exception{public:	MyException(char* msg)		:exception(msg){			}};void fun1() throw(MyException){	throw MyException("自定义异常");}void main(){	try{		fun1();	}	//不适用引用的话,会产生副本	//catch (MyException err){	//	cout << "MyException异常:" << err.what() << endl;	//}	//推荐这种写法,使用引用就不会产生副本	catch (MyException &err){		cout << "MyException异常:" << err.what() << endl;	}	system("pause");}复制代码

下面这条语句是抛出异常指针:

throw new MyException("自定义异常指针");复制代码

捕获的时候需要加上指针:

catch (MyException *err){	cout << "MyException异常:" << (*err).what() << endl;}复制代码

但是我们一般不推荐抛出异常指针,因为new出来的类是存在于堆内存的,我们还需要手动去delete。

###抛出内部类的异常

class Err{public:	class MyException{	public:		MyException(){}	};};void fun1() throw(Err::MyException){	throw Err::MyException();}复制代码

如果觉得我的文字对你有所帮助的话,欢迎关注我的公众号:

我的群欢迎大家进来探讨各种技术与非技术的话题,有兴趣的朋友们加我私人微信huannan88,我拉你进群交(♂)流(♀)

转载地址:http://ywsnl.baihongyu.com/

你可能感兴趣的文章
vue.js学习之better-scroll封装的轮播图初始化失败
查看>>
去掉xcode编译warning:ld: warning: directory not found for option '-L
查看>>
杭电1702--ACboy needs your help again!
查看>>
web前端开发分享-css,js进阶篇
查看>>
安大校赛/异或运算一题。
查看>>
ANT build.xml文件详解
查看>>
MVC和观察者模式
查看>>
python 基本的序列和映射规则
查看>>
强制回收和IDisposable.Dispose方法
查看>>
mybatis plus条件构造器
查看>>
反射基础
查看>>
quick sort(重复数版)
查看>>
乌班图 root权限获取
查看>>
Java内部类
查看>>
趣说Java:我是一个线程
查看>>
【转】CKEditor3.0.1在asp.net下进行配置的方法加图片上传
查看>>
数组的indexOf方法--数组去重
查看>>
HDU 1498 50 years, 50 colors
查看>>
实模式和保护模式(附i386/x86的由来)
查看>>
sql server DbHelperSQL类
查看>>