当前位置: 首页 > news >正文

网站建设佛网站开发与管理专业的就业信息

网站建设佛,网站开发与管理专业的就业信息,摄影招聘网站,互联网公司简介C异常 提到异常#xff0c;大家一定不陌生#xff0c;在学习new关键字的时候就提到了开空间失败会导致抛异常。其实异常在我们生活中的使用是很多的#xff0c;有些时候程序发生错误以后我们并不希望程序就直接退出#xff0c;针对不同的情况#xff0c;我们更希望有不同的…C异常 提到异常大家一定不陌生在学习new关键字的时候就提到了开空间失败会导致抛异常。其实异常在我们生活中的使用是很多的有些时候程序发生错误以后我们并不希望程序就直接退出针对不同的情况我们更希望有不同的异常处理本篇针对C的异常会做详细的讲解希望大家学习愉快 C异常基本概念 异常是一种处理错误的方式当一个函数发现自己无法处理的错误的时候就可以抛出异常。下面是C有关异常的几个关键字 下面通过一段代码来进行说明 // 异常 double Division(int a, int b) {if (b 0)(throw Division by zero condition!;elsereturn ((double)a / (double)b); } void Func() {int len, time;cin len time;cout Division(len, time); } int main() {try{Func();}catch (const char* errmsg){cout errmsg endl;}return 0; }上面的代码是除法程序中当被除数为0的时候就出现异常throw后面是异常抛出对象这个对象可以是任意类型的对象当函数运行起来的时候如果函数没有发生任何异常就会跳过catch部分那么异常的抛出和匹配规则是怎么样的 异常是由抛出对象而引发的该对象的类型决定了应该激活哪个catch的处理代码而其他的catch处理代码会被忽略如果抛出的异常没有任何一个catch可以匹配那么会直接终止程序 被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的一个 比如上面的代码中Division函数抛出异常后如果在Func函数中有捕获在main函数中也有捕获那么会优先选择距离抛出异常位置最近的一个也就是Func函数当然这个位置近不是代码书写位置而是在调用关系上 // 异常 double Division(int a, int b) {if (b 0)throw Division by zero condition!;elsereturn ((double)a / (double)b); } void Func() {int len, time;cin len time;try{cout Division(len, time);}catch(...){throw;} } int main() {try{Func();}catch (const char* errmsg){cout errmsg endl;}return 0; }代码也可以类似上面写Func函数捕获异常如果异常返回对象类型过多并且多个类型的异常处理方式相同那么在catch捕获部分可以用…来代替抛出对象的类型然后捕获后再次throw。throw的时候如果上面也不写就是将捕获到的异常再次重新抛出。 抛出和捕获并不是完全匹配可以抛出的派生类对象使用基类捕获。 自定义异常体系 如果每次抛异常只是一个简单的字符串或者数字那么在一些很多的大型项目中显得很鸡肋很多公司都会自己定义异常规范。 在异常的抛出中构造对象进行抛出比较实用 // 服务器开发中通常使用的异常继承体系 class Exception { public:Exception(const string errmsg, int id):_errmsg(errmsg), _id(id){}virtual string what() const{return _errmsg;} protected:string _errmsg;int _id; }; class SqlException : public Exception { public:SqlException(const string errmsg, int id, const string sql):Exception(errmsg, id), _sql(sql){}virtual string what() const{string str SqlException:;str _errmsg;str -;str _sql;return str;} private:const string _sql; }; class CacheException : public Exception { public:CacheException(const string errmsg, int id):Exception(errmsg, id){}virtual string what() const{string str CacheException:;str _errmsg;return str;} }; class HttpServerException : public Exception { public:HttpServerException(const string errmsg, int id, const string type):Exception(errmsg, id), _type(type){}virtual string what() const{string str HttpServerException:;str _type;str :;str _errmsg;return str;} private:const string _type; }; void SQLMgr() {srand(time(0));if (rand() % 7 0){throw SqlException(权限不足, 100, select * from name 张三);}//throw xxxxxx; } void CacheMgr() {srand(time(0));if (rand() % 5 0){throw CacheException(权限不足, 100);}else if (rand() % 6 0){throw CacheException(数据不存在, 101);}SQLMgr(); } void HttpServer() {// ...srand(time(0));if (rand() % 3 0){throw HttpServerException(请求资源不存在, 100, get);}else if (rand() % 4 0){throw HttpServerException(权限不足, 101, post);}CacheMgr(); } int main() {while (1){try {Sleep(1000);HttpServer();}catch (const Exception e) // 这里捕获父类对象就可以{// 多态cout e.what() endl;}catch (...){cout Unkown Exception endl;}}return 0; }前面提到了可以抛出派生类的对象然后用基类捕获这里就可以利用C特性之一多态进行程序设计在捕获对象时使用父类对象进行捕获而抛出对象中可以抛出派生类使用多态实现不同异常的捕获。 C异常的优缺点 C异常的优点 异常的设计极大方便了调试工作首先异常发生不会导致程序直接退出比如构造函数如果没有异常其本身也没有返回值就没办法通过返回值表示错误异常相比返回值构造异常对象可以表示更多的错误信息更好帮助找到程序的问题。异常相比返回值如果函数调用链比较长那么异常可以直接跳转到捕捉位置进行异常捕捉和处理如果是返回值就需要经过每一层调用达到效果有很多第三方库也包含异常如果想要使用这些库就需要使用异常 C异常的缺点 如果返回值可以让函数的返回层层递进那么异常就会导致程序的执行流变得混乱跟踪调试以及分析程序会变的困难C没有垃圾回收机制资源需要自己管理异常容易导致内存泄漏死锁等异常安全问题这个之后的智能指针部分详细讨论C的异常规范并不是在语法层面强制的有很多的自定义异常机制比较混乱 针对C异常的规范这里说一下 上面的代码中在函数声明中出现实际上在声明部分和定义部分出现都是没问题的但是一定要匹配。 总而言之异常尽量规范使用异常规范有两点 抛出异常类型都继承自一个基类函数是否抛异常抛什么异常都使用上面提到的异常规范的方式规范化 论 C的异常规范并不是在语法层面强制的有很多的自定义异常机制比较混乱 针对C异常的规范这里说一下 [外链图片转存中…(img-iYgOZmid-1682907829541)] 上面的代码中在函数声明中出现实际上在声明部分和定义部分出现都是没问题的但是一定要匹配。 总而言之异常尽量规范使用异常规范有两点 抛出异常类型都继承自一个基类函数是否抛异常抛什么异常都使用上面提到的异常规范的方式规范化
http://www.dnsts.com.cn/news/118240.html

相关文章:

  • 做网站head.htmseo查询seo
  • 张家港网站建设培训班帮助设计的网站
  • 商业网站的建设流程铁岭新区旅行社电话
  • 收录查询 站长工具wordpress 调用评论框
  • 网站优化建议个人网页设计思路怎么写
  • 一个网站的制作步骤违法网站开发者
  • 浙江省火电建设公司网站广州外贸型网站
  • 湖北建设工程注册中心网站白百度一下你就知道
  • 国内室内设计网站推荐wordpress集团网站
  • 苏州教育网站建设有哪些网站做的好处
  • 网站设计流程步骤网站构建的友情链接怎么做
  • 镇江市建设局网站云购网站建设
  • 德阳网站seo做视频网站要什么软件
  • 网站建设接单吧谷歌google中文登录入口
  • 上海知名网站设计色盲和色弱的区别
  • 如何修改上线网站眉山建设局网站
  • wordpress相册模式选择洛阳网站建设优化
  • 北京购物网站建设网站建设活动策划
  • 网站建设教育类旧式网站网站建设市场前景如何
  • 建设银行网站改手机号怎么用云虚拟主机建设网站
  • 西安网站托管商家电子商务专业可以从事什么工作
  • 南通网站建设案例凡科快图下载
  • 专业做俄语网站建设司企业网站优化暴肃湖南岚鸿很好
  • 海淀深圳网站建设公司价格外贸加工订单
  • 广西人社app登录不了结构优化设计
  • 做书评的网站如何推广一个新的app
  • 厦门网站建设创建有哪些中国建设银行网站首页英文
  • 国外建设网站怎样清理网站后门
  • 网站权重提升wordpress商店插件怎么用
  • 网站建设中源码专门做海外服装购的网站有哪些