摘要: 1.中断和异常的概念以上定义摘自Intel官方文档80x86编程手册第三卷第五章Interupt and Exception Handling。从中可以看出中断来自外围设备(peripheral devices,这里指除了CPU)的通知(signals from hardware),而异常则是CPU在执行指令时遇到错误的条件(error condition, 我认为这里的错误的条件实际上就是错误的操作数(error operand)),所以说中断是由外围设备产生的,而异常是由CPU自身产生的(在执行指令时)。注意:上文中有这样一句话:Software can also generate int 阅读全文
posted @ 2013-10-19 20:36 a ray of sunshine 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 1. 系统处理异常的过程2. 系统执行全局展开的流程3. 关于编写函数时的错误处理方法4. C++异常和结构化异常(SEH)的比较注意上文中划红色线的语句,我们得出结论:C++异常机制是由SEH机制来实现的。 阅读全文
posted @ 2013-10-19 20:18 a ray of sunshine 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 1. try-finally 语句的基本形式__try{ //guarded code}__finally{ //termination handler}termination handler无论在guarded code以何种方式退出都会被调用。guarded code的退出方式有如下三种:a. 正常退出该代码块b. 在执行guarded code时发生异常c. 在执行guarded code时遇到return语句或者goto语句(无条件跳转)在这三种情况下termination handler都会被执行。其中第一种方式,常常用来对guarded code中申请的资源进行释放和清... 阅读全文
posted @ 2013-10-19 20:05 a ray of sunshine 阅读(199) 评论(0) 推荐(0) 编辑
摘要: SEH的应用Windows操作系统和C/C++编译器虽然对SHE(结果化异常处理)提供了很好的支持,但是Win32 API自身却并没有使用该机制来报告程序执行过程中出现的异常。Win32 API对异常的处理是这样的:当有异常发生时,该API函数就会返回一些特定的值来表示函数调用失败了,这些值有,NULL, INVALID_HANDLE_VALUE, FALSE等,同时该API函数会使用SetLastError函数来设置一个基于线程的变量,该变量表示最近一次发生异常时的错误码,我们的程序在调用的API函数之后如果发现函数调用失败(即函数返回上述值)可以调用GetLastError来获得该错误码, 阅读全文
posted @ 2013-10-19 19:40 a ray of sunshine 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 1. try-except语句的执行流程try-except语句的一般形式:__try{ //guarded section}__except(filter expression){ //exception handler}首先,明确几个术语,__try子句后面的复合语句被称作guarded section,__except子句括号中的表达式称为filter expression,__except子句后面的复合语句称为exception handler执行流程如下:(1)guarded section被执行(2)如果执行(1)时未发生异常,则直接执行exception handle... 阅读全文
posted @ 2013-10-19 19:29 a ray of sunshine 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 1. 在结构化异常处理中__try块和__except块是成对出现的,每一个__except块都必须有与之对应的__try块,不可能出现一个__try块下面有多于一个的__except块,如果这样就会出现编译错误,例如: __try { *presult = d1 / d2; } __except(GetExceptionCode() == EXCEPTION_STACK_OVERFLOW ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { ... 阅读全文
posted @ 2013-10-19 19:24 a ray of sunshine 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 对于模板函数和模板类来说,其参数类型也是被参数化的,如: template bool compare(const T v1, const T v2) { return v1 - v2; } 其中的参数v1和v2为T,只有在运行时(确切的说只有模板代码被编译时)才会确定,所以该文件不能被独立编译(将该模板函数单独编译到一个文件中如:compare.x)成一个目标文件(.obj文件)。因此 Mricosoft C++ 中 STL 库的模板类及模板方法只能以源文件的形式提供给用户(程序员)使... 阅读全文
posted @ 2013-10-19 19:08 a ray of sunshine 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 一 C++异常体系与Java异常体系 下图为c++标准库的异常类体系:其中的runtime_error类与java中的RuntimeException类有点类似,而logic_error与java中Exception类直接继承下来的异常类(除了RuntimeException)类似。Java中的RuntimeException类及其子类在编码时可以捕获也可以不捕获(由具体的业务逻辑决定),Exception类直接继承下来的异常类在编码时必须处理(要么捕获,要么再抛出)。而c++中的所有异常均可以捕获也可以不捕获(程序是可以编译通过的)。二 将Exception类型的异常转化成RuntimeEx 阅读全文
posted @ 2013-10-19 19:00 a ray of sunshine 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 1.exception与runtimeexception的区别exception由普通的代码抛出,而runtimeexception由系统(JVM)抛出,所以runtimeexception可以捕获也可以不捕获,而exception则必需处理,要么捕获(try...catch...),要么抛出,交给上一层代码处理。2.基于MVC的Web开发exception的处理倘若该层能够处理该异常,则处理,否则应该在你的代码中抛出一个exception,交由上一层处理,例如,处理文件下载时,Model层在进行文件读取时有可能遇到IOException,此时,在Model层是不应该也无法处理该excepti 阅读全文
posted @ 2013-10-19 18:41 a ray of sunshine 阅读(126) 评论(0) 推荐(0) 编辑