异常情况(Exception)是一个颇为新鲜的C++语言特性,可以帮助你管理执行期的错误,特别是那些发生在多层嵌套函数调用中的错误。现在C++编译器必须支持异常处理情况。
C++的exception可以从多层嵌套的例程调用中直接以一条快捷方式撤回到异常情况处理例程(exception handler),这种“错误管理方式”远比结构化程序中经过层层的例程传回一系列的错误状态来得好。事实上,exception handling是MFC和OWL两个application frameworks的防弹中心。
C++导入了三个新的exception保留字:
1、try。之后跟随一段以{ }圈出来的程序代码,exception可能在其中发生。
2、catch。之后跟随一段以{ }圈出来的程序代码,那是exception处理例程所在。catch应该紧跟在try之后。
3、throw。这是一个指令,用来产生(丢出)一个exception。
下面是个实例:
try{
//try block.
}
catch(char *p) {
printf("Caught a char* exception, value %s\n", p);
}
catch(double d) {
printf("Caught a numeric exception, value %g\n", d);
}
catch(. . .) { //catch anything
printf("Caught an unknown exception\n");
}
MFC早就支持exception,而且编译器本身又支持完整的C++exception,所以MFC因此有了两个exception版本:你可以使用语言本身提供的语句,也可以沿用MFC古老的方法(以宏形式出现)。
MFC的exception机制是以宏和exception types为基础的。这类宏类似C++的exception保留字,操作也很像。MFC以下列宏仿真C++ exception handling:
TRY
CATCH(type,object)
AND_CATCH(type,object)
END CATCH
CATCH_ALL(object)
AND CATCH ALL(object)
END_CATCH_ALL
END TRY
THROW()
THROW LAST()
MFC所使用的语法与日渐浮现的标准稍微不同,不过其间差异微不足道。为了以MFC捕捉exceptions,你应该建立一个TRY区块,下面接着CATCH区块:
TRY{
//try block
}
CATCH (CMemoryException , e) {
printf ( "Caught a memory exception.\n");
}
AND CATCH ALL (e) {
printf ("Caught an exception.\n");
}
END_CATCH_ALL
感觉关于异常处理有点抽象,主要是没有实例帮助理解,实在不好意思,等我碰到程序中的例子了再回来补充实例。