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

天水市网站建设_网站建设公司_Photoshop_seo优化

北京网站建设手机号,网站怎么做描文本,大钟寺网站建设,支付宝微信wordpress这篇文章介绍下 C 的异常处理。 讨论一种最为常见的出现异常的情况#xff0c;即 0 不能作为除数。为此#xff0c;我们将自定义一个除法#xff1a; #include iostreamusing namespace std;int divide(int a, int b) {return a / b; }int main() {int a 3, b 0…这篇文章介绍下 C 的异常处理。 讨论一种最为常见的出现异常的情况即 0 不能作为除数。为此我们将自定义一个除法 #include iostreamusing namespace std;int divide(int a, int b) {return a / b; }int main() {int a 3, b 0;int res divide(a, b);cout result res; }事实上这样的代码在我的电脑上运行会卡在终端也没有提示无法运行的报错把 res 直接改成 3/0 就看到正常的报错了 TestDivide.cpp: In function int main(): TestDivide.cpp:14:29: warning: division by zero [-Wdiv-by-zero]14 | cout result 2/0;| ~^~ result 不使用异常机制的处理 abort 尝试在函数内部加入针对除数为0的报错使用 abort() int divide(int a, int b) {if(b0){cout cannot divide by 0 endl;abort();}return a / b; }事实上这次除了打印我加入的一行文字以外程序的运行并没有明显的变化。abort() 的作用是向标准错误流发送消息 abnormal program termination 然后终止程序。它还会返回一个值告诉父进程处理失败。 不知道为什么这里没有终止进程。 返回值处理错误 另一种在 C 里常用的方式是将我们想获取的值作为引用传回来将返回值作为错误的标记。重新设计的 divide 如下 bool divide(int a, int b, int res) {if(b0){cout cannot divide by zero endl;return false;}else{res a/b;return true; } }调用我就不写了。 这种方式一定程度上规避掉了系统的异常机制换句话说这是由开发者自己“实现”的异常编译器不会认为这段代码是处理异常的。 使用异常机制的处理 现代C 的异常机制多少借鉴了其他语言的机制即 throw-try-catch-finally 机制即引发异常-捕获异常-处理异常 引发异常 改造 divide 函数使其能够抛出异常 int divide(int a, int b) {if(b0){throw cannot divide by ZERO!;}return a / b; }执行 throw 相当于返回了异常因此从某种程度上来说这里的 throw 和 return 的作用差不多。但是不同的是throw并不是把控制权返回给调用程序而是会沿着调用序列后退直到找到能处理异常的 catch 语句为止。 捕获与处理异常 main 函数改写如下 int main() {int a 3, b 0;int res 0;try{res divide(a, b);}catch (const char *s){cout s endl;}cout res res; }输出如下 cannot divide by ZERO! res 0如果引发的异常最终没有与之匹配的类型 catch效果等同于调用 abort() 函数。 使用基于自定义类的异常机制 使用字符串处理异常需要我们编写代码打印异常类型依据面向对象的原则其实写一个类来处理更好。 在头文件中定义一个 bad_divide 类专门用于处理异常其 what() 方法此方法和 C 标准类中的方法在名字上是一致的用于打印异常信息 struct bad_divide { private:int a;int b;public:bad_divide(int a, int b) : a(a), b(b){};void what(){cout a divided by b is illegal! endl;} };同样调用的地方也不再捕捉字符串了而是捕捉这个对象并调用 what() 方法打印异常。 int divide(int a, int b) {if (b 0){throw bad_divide(a, b);}return a / b; }int main() {int a 3, b 0;int res 0;try{res divide(a, b);}catch (bad_divide bd){bd.what();}cout res res; }
http://www.ihoyoo.com/news/127954.html

相关文章:

  • 网站开发与设计实训心得两千字长宁制作网站
  • 做个人博客的网站wordpress文章缩进
  • 网站如何做国外推广网页设计服务方案
  • 提升网站知名度定制旅游网站建设成都
  • 做美食网站赚钱吗网络维护招聘信息
  • 个人备案网站类型系部网站建设需求分析运行需求
  • 漳浦县建设局网站外贸公司如何接单
  • 做淘宝要用到哪些网站桂平市住房和城乡建设局门户网站
  • 做网站要用编程吗网站cdn 自己做
  • 外包网站设计哪家好网站外链平台的建设方法平台类型(至少5个)?
  • php mysql 网站开发实例教程淄博网站建设优化上汽
  • 好网站建设公司选择哪家好商务网站建设方案
  • 浙江省国有建设用地使用权建议网站小企业网站建设一般收费
  • apache多个网站小白怎么制作微信小程序
  • 银川网站建设联系电话个人网页设计尺寸是多少
  • 网站开发 后端内蒙古企业网站建设
  • 陕西省城乡建设学校网站集团网站设计公司
  • dw做响应式网站怎么样建立个人网站
  • 网站 建站模式遵义建站平台哪家好
  • godday网站建设个体户门头图片
  • 展示型网站模板代码建行企业银行app下载
  • 安庆哪些做网站的公司好宁夏做网站公司
  • git网站开发网页设计叫什么行业
  • 怎样建设外贸网站济宁seo
  • 网站所有人查询国外h5分享网站
  • 有哪些装修网站青州做网站的网络公司
  • 怎样构建自己的网站江苏网站建设 博敏网站
  • 什么网站可以做投资服装设计专业有前途吗
  • 深圳公明网站制作名师工作室建设网站
  • 中英文网站asp怎么做济宁网站建设 优化培训