|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式系统程序设计 > 嵌入式程序设计语言 > 嵌入式C/C++程序设计要求 > C++程序设计基础 >
|
相关知识点:30个
|
|
|
|
异常(exception)是程序可能检测到的运行时刻不正常的情况,如new无法取得所需内存、除数为0、运算溢出、数组越界访问或函数参数无效等,这样的异常存在于程序的正常函数功能之外,但是要求程序立即处理。C++提供了一些内置的语言特性来产生并处理异常,以提高程序的容错能力,使程序更健壮。异常机制使一个函数可以在发现自己无法处理的错误时抛出一个异常,希望其调用者可以直接或者间接处理这个问题。
|
|
|
传统的错误处理技术在检查到一个局部无法处理的问题时,常用以下方式:
|
|
|
|
|
|
(4)调用一个预先准备好在出现“错误”的情况下的函数。
|
|
|
第一种情况经常是不允许的,无条件终止程序的方式不适合应用到不能当机的程序中。第二种情况比较常用,但有时会带来不便,例如返回错误码是int型,每个调用都要检查错误值。第三种情况很容易误导调用者,如果调用者没有去检查表示错误码的全局变量或者通过其他方式检查错误,会造成无法预料的后果,这种方式在并发情况下也不能很好工作。第四种情况比较少用,而且回调的代码不该过多出现。
|
|
|
C++的异常机制为程序员提供了一种处理错误的方式,使程序员可以更自然的方式处理错误。使用异常把错误和处理分开来,由库函数抛出异常,由调用者捕获这个异常,调用者就可以知道程序函数库调用出现错误并加以处理。
|
|
|
try、catch、finally和throw是异常处理的关键字,它们配合起来工作。try内一般放入程序或函数的工作代码(出错时发生异常的代码),catch是程序发生异常后的出错处理代码,每个catch块指定捕获和处理一种异常,而finally块中则放着不论是否出错都需要处理的代码。throw用来声明函数可以抛出的异常和程序检测到出错时用来抛出一个异常对象。
|
|
|
|
如果一个函数抛出一个异常,它必须假定该异常能被捕获和处理。在函数内抛出一个异常(或在函数调用时抛出一个异常)时,就退出函数的执行。如果不希望在异常抛出时退出函数,可在函数内创建一个特殊块用于解决实际程序中的问题,由于可通过它测试各种函数的调用,所以被称为测试块,由关键字try引导,如下所示:
|
|
|
|
异常被抛出后,一旦被异常处理器接收到就被销毁。异常处理器由关键字catch引导,一般紧随在try块之后。
|
|
|
如果一个异常信号被抛出,异常处理器中第一个参数与异常抛出对象相匹配的函数将捕获该异常信号,然后进入相应的catch语句,执行异常处理代码。
|
|
|
函数的所有潜在异常类型随关键字throw插入在函数说明中。例如:
|
|
|
|
而传统函数声明void f();意味着函数可能抛出任何一种异常。如果声明为void f() throw();,则意味着函数不会抛出异常。
|
|
|