日期:2011-03-22 13:55:00 来源:本站整理
<b>More effective C++:谨慎利用异通例格</b>[VC/C++编程]
本文“<b>More effective C++:谨慎利用异通例格</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
毫无疑问,异通例格是一个惹人注目的特点.它使得代码更简单理解,因为它明确地描写了一个函数可以抛出什么样的非常.但是它不只是一个风趣的注释.编译器在编译时有时可以检测到异通例格的不一致.并且假如一个函数抛出一个不在异通例格范围里的非常,系统在运行时可以检测出这个错误,然后一个特别函数unexpected将被自动地调用.异通例格既可以做为一个指导性文档同时也是非常利用的强迫约束机制,它仿佛有着很诱人的外表.
不过在普通情形下,美貌只是一层皮,外表的漂亮并不代表其内涵的本质.函数unexpected缺省的行为是调用函数terminate,而terminate缺省的行为是调用函数abort,所以一个违反异通例格的程序其缺省的行为就是halt(终止运行).在激活的stack frame中的部分变量没有被释放,因为abort在关闭程序时不举行这样的排除操作.对异通例格的触犯变成了一场并不该该发生的灾难.
不幸的是,我们很简单就可以够编写出招致发生这种灾难的函数.编译器仅仅部份地检测非常的利用能否与异通例格保持一致.一个函数调用了另一个函数,并且后者大概抛出一个违反前者异通例格的非常,(A函数调用B函数,因为B函数大概抛出一个不在A函数异通例格之内的非常,所以这个函数调用就违反了A函数的异通例格 译者注)编译器不对此种情形举行检测,并且语言尺度也禁止它们回绝这种调用方法(固然可以显示告诫信息).
比方函数f1没有声明异通例格,这样的函数便可以抛出肆意种类的非常:
extern void f1(); // 可以抛出肆意的非常
假定有一个函数f2通过它的异通例格来声明其只能抛出int范例的非常:
void f2() throw(int);
f2调用f1是非常合理的,即便f1大概抛出一个违反f2异通例格的非常:
以上是“<b>More effective C++:谨慎利用异通例格</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论