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

宁波做网站十大公司哪家好营销网站建设公司哪家好

宁波做网站十大公司哪家好,营销网站建设公司哪家好,wordpress footer错位,常用的软件下载网站异常的引出 如过你写过不少的程序的话#xff0c;相信你应该遇到过一些程序所不能处理的错误而导致程序崩溃的问题吧#xff0c;比如说#xff1a;操作野指针#xff0c;访问空指针#xff0c;函数的除零错误#xff0c;数组越界#xff0c;在栈上开辟空间过大导致栈溢…异常的引出 如过你写过不少的程序的话相信你应该遇到过一些程序所不能处理的错误而导致程序崩溃的问题吧比如说操作野指针访问空指针函数的除零错误数组越界在栈上开辟空间过大导致栈溢出等等……对于我们人来说犯错并不可怕可怕的是不改正错误对于程序来说也是如此。程序执行的时候难免会发生这样或者那样的错误要想改正错误所使用的编程语言得提供处理错误的机制 学习过C语言的人都知道C语言中的错误处理的方式有 终止程序 和 返回错误码这两种方式确实可以处理程序中的大量错误但是C语言的这两种处理错误的方式都有点不足 比如说 终止程序这种方式当程序中发生错误的时候直接就终止整个程序但是我们希望我们的程序在发生错误的语句之后还要执行比如说我们还需要释放内存空间直接终止程序导致内存空间没有释放造成内存泄漏的问题如果这是一个服务器程序就会导致服务器资源紧缺服务器运行越来越慢具有卡死的风险。再或者说返回错误码这种方式程序员需要自己根据返回的错误码去 错误码表中找对应的错误 如果返回的错误码比较多查找起来是一件很难受的事情。说白了就是返回错误码的方式不直接程序员不能直接清楚的知道对应的错误是什么。 基于C语言中对错误处理的种种不便C语言呢 完善了对错误的处理机制C语言本来就是基于C语言所产生的C语言要兼容C语言的绝大部分语法这种新的处理错误的机制就是异常。 如何使用C中的异常机制 C中要想使用异常来处理错误需要通过 try、catch、throw 三个关键字来进行 try 具有尝试的意思后面跟一个代码块意思是尝试一下代码块中的代码如果该代码块中抛出了异常就交给类型匹配的 catch 代码块处理。如果没有抛出异常就执行 catch 代码块后面的语句。catch 具有捕捉抓住的意思catch后面跟一个圆括号圆括号后面跟一个花括号圆括号中的内容表示捕捉的异常的类型花括号中就可以处理该异常了try代码块后面可以跟多个catch 代码块。注意捕捉的异常类型 和抛出的异常类型 是匹配的这里的匹配有两种匹配方式 1、抛出A类型的异常被接收A类型异常的catch语句捕获2、抛出子类类型的异常被接收该父类类型的catch语句捕获。throw 具有扔、抛的意思throw 后面跟抛出的异常对象。抛出的异常对象一旦被捕获程序就跳转到捕获异常的catch代码块中执行如果到main函数中都还不能被捕获则终止程序。 #include iostream using namespace std;int func(int a, int b) {if(0 b)throw 这是一个除零错误; int c a / b;return c; }int main() {try{int a 1;int b 0;func(a, b);}catch(const char* err_message){cout err_message endl; }catch(...) // ... 表示捕获任意类型的异常{cout 未知异常 endl;}return 0; } 总的来说就是C中的异常是通过对象的形式抛出来的该对象的类型决定了 匹配哪个 catch 代码块 来处理匹配的catch代码块是 函数调用链中与该对象类型匹配 且 离抛出异常位置最近的那一个。那抛出的异常对象到底是什么呢异常对象是一个局部对象局部对象出了作用域就会销毁所以抛出该局部对象的时候会生成一个临时变量这个临时变量会在被捕获后销毁这里类似于函数的传址返回可以看出右值引用的移动语义也有提高抛出异常的效率。 函数调用链中异常栈是如何展开和匹配的 异常的使用难免弯弯绕绕所以我们要搞清楚异常是如何匹配的说白了就是通过 throw 抛出的异常对象应该被哪个catch代码块捕获处理。 当通过 throw 抛出异常对象的时候首先要检查 throw 本身是否在 try 代码块内部如果在的话再去找匹配的 catch 代码块如果找到了匹配的 catch 代码块的话就跳到 匹配的 catch 代码块中执行如果没有找到匹配的 catch 代码块就会退出当前函数栈在上一层函数栈中继续寻找匹配的 catch 代码块。如果返回到 main 函数的函数栈中依旧没有找到对应的catch代码块就会终止该程序。所以为了保险起见通常会在最后加一个 catch(...) 表示捕获任意类型的异常避免程序终止。执行完 catch 代码块中的内容之后会继续执行 catch 代码块后面的内容。 异常的重新抛出 异常为什么需要重新抛出呢 当一个函数捕获到它不能或不应该处理的异常时重新抛出这个异常可以确保错误信息被传递到能够处理该异常的代码中去。这样调用者有机会捕获并处理这个异常或者进一步地将它传递给它的调用者。 异常如何重新抛出 直接在捕获异常对象的 catch 代码块中使用 throw 关键字直接上代码 #include iostream using namespace std;int func2(int a, int b) {if(0 b)throw 这是一个除零错误; int c a / b;return c; }void func1() {int a 1;int b 0;try{func2(a,b);}catch(...){cout 重新抛出异常 endl;throw; // 使用throw关键字重新抛出异常} }int main() {try{func1();}catch(const char* err_message){cout err_message endl; }return 0; } 使用异常可能存在的问题 众所周知程序是按照一定的执行流执行的但总有一些操作试图打破程序的执行流比如continue语句break语句goto语句不推荐使用return语句在加上我们刚刚学习的 try…catch语句 也是可以打破程序的执行流的continue、break、return语句都是可控的但是 try…catch语句 会直接跳转到匹配的 catch 代码块中执行这也就意味着处于 throw 和该catch代码块之间的语句不会被执行如果这是一些涉及资源释放的语句的话就会造成资源没有被释放从而导致内存泄漏的问题。如果是多线程的代码异常的抛出导致 unlock() 未被执行就会导致死锁问题。如何解决呢通过智能指针解决。 由此可见对于异常的使用需要小心小心再小心。而且在一些场景中是不能抛异常的比如不要在 构造函数 和 析构函数 中抛异常。 不要在构造函数中抛异常构造函数是用来初始化对象的如果在构造函数中抛异常可能导致对象初始化不完整影响后续的使用。不要在析构函数中抛异常析构函数是用来清理对象中的资源的如果在析构函数中抛异常可能导致对象中资源清理不完全如果析构函数中需要 释放资源or解锁就会造成内存泄漏or死锁的问题。 异常的优缺点 优点 1.异常可以更加清晰的展示出错误的信息可以更好的帮助我们定位程序中的bug。 在实际开发中通常会自定义一套异常体系定义一个基类不同的模块可能会抛出的异常定义为派生类这样抛出的异常是哪个模块的就清晰明了了。 2.处理错误速度更快 异常体系中一旦抛出异常程序直接跳转到匹配的 catch 代码块中执行如果是返回错误码的方式的话需要层层返回在最外层才能拿到错误码。  3.弥补了一些场景下处理错误的不足 比如有些函数没有返回值不方便使用错误码返回错误信息。 缺点 1.try catch语句会造成程序的执行流乱跳导致调试和分析问题时比较困难也有可能导致不可预料的问题在使用异常可能会存在的问题中已经分析过了 2.C中的异常体系定义的不好大家自己定义自己的异常体系非常混乱。 3.异常要是使用不规范的话会增加而外的使用成本。
http://www.dnsts.com.cn/news/47297.html

相关文章:

  • 建设银行个人网站我的免费网是个什么网站
  • 百度网站v2升级到v3怎么做华铭保信建筑公司网站
  • 印花图案设计网站佛山市公司网站建设哪家好
  • 做视频网站怎么盈利模式河北省建设厅报名网站
  • 揭阳网站制作平台太原营销型网站建设
  • 唐山网站建设托管重庆网站建设优化排名
  • 规划网站的思路云南网站开发软件
  • 嵌入式软件开发项目泉州seo外包
  • 优秀个人网站设计模板做网站广告推广平台
  • 建设银行网站网址湖北省和建设厅网站首页
  • 怎么做纯文本网站广告设计师工作内容
  • 网站 代理 备案 费用吗广告策划书的内容
  • 电脑十大免费游戏网站wordpress 324错误
  • 网站开发设计协议seo云优化外包
  • 网站开发流程宜春会员管理系统免费版官方下载
  • 杭州网站搜索排名苏州网络营销及网站推广
  • 怎么给网站添加音乐网站的结构怎么做
  • 帮做简历哪个网站好产品外包装设计网站
  • 接广告的平台保定seo排名公司
  • 那个网站可以找人做设计师网站建设套餐方案
  • 包装建设网站返利网站建设哪个公司好
  • 为什么网站需要维护石家庄哪有个人建站的
  • 网站换域名有没有影响asp做招聘网站流程
  • 国土资源局加强网站建设绵阳建设招投标在哪个网站
  • 网站的类型大全网站空间到期了
  • 现在建一个网站一年费用只要几百元成都时代装饰工程有限公司
  • 手表网站排行榜本地wordpress安装教程
  • 淄博网站建设 招聘制作网站需要用什么软件
  • 金融行业网站模板南昌成都网站建设方案
  • 手机网站适配代码网络公司是干什么工作的