为什么要加一个throw()到你的函数中?

这是异常规范,只会出现在声明函数中,表示这个函数可能抛出任何类型的异常

void GetTag() throw(int);表示只抛出int类型异常
void GetTag() throw(int,char);表示抛出in,char类型异常
void GetTag() throw();表示不会抛出任何类型异常
void GetTag() throw(...);表示抛出任何类型异常

void GetTag() throw(int);表示只抛出int类型异常
并不表示一定会抛出异常,但是一旦抛出异常只会抛出int类型,如果抛出非
int类型异常,调用unexsetpion()函数,退出程序。

假如你加一个throw()属性到你的永远不会抛出异常的函数中,编译器会非常聪明的知道代码的意图和决定优化方式。考虑下面的代码:

显示代码打印01 class MyClass

02 {

03     size_t CalculateFoo()

04     {

05         :

06         :

07     };

08     size_t MethodThatCannotThrow() throw()

09     {

10         return 100;

11     };

12     void ExampleMethod()

13     {

14         size_t foo, bar;

15         try

16         {

17             foo = CalculateFoo();

18             bar = foo * 100;

19             MethodThatCannotThrow();

20             printf("bar is %d", bar);

21         }

22         catch (...)

23         {

24         }

25     }

26 };

当编译器看到这个带"throw()"属性代码的时候,编译能够优化这个"bar"变量,因为它知道从MethodThatCannotThrow()函数中不会抛出任何的异常。如果没有这个throw()属性,编译器必须创建这个"bar"变量,因为假如MethodThatCannotThrow抛出了一个异常,这个异常句柄可能会需要依靠这个bar变量。

另外,象prefast源代码分析工具能够(也会)用throw()注释去优化他们的错误检测能力----举个例子,假如你有一个try/catch而且所有调用的函数都已经标记了throw(),实际上你不需要这个try/catch(是的,假如你最后调用的函数可能抛出异常这就会有个问题了)。

转载于:https://www.cnblogs.com/spring3/archive/2012/03/08/2400950.html

throw()使用小结相关推荐

  1. 解析Objective-C中多态、动态类型和动态绑定

    解析Objective-C中多态.动态类型和动态绑定 转自http://mobile.51cto.com/iphone-285157.htm Objective-C中多态.动态类型和动态绑定是本文要介 ...

  2. struts2文件上传大小限制问题小结(引用)

    最后解决办法: 页面js控制上传文件的大小,在页面进行控制.如下代码 inputs是所有文本上传input DOM //名称信息var nameStr='';//大小信息var sizeStr=''; ...

  3. IbatisNet开发使用小结

    一. 介绍 平常做企业级应用,需求变化是经常的事,而很多基础代码重复也是很让人头疼的问题.所以很多人会使用一些ORM框架来增强项目的可维护性.可扩展性.IBatis.Net就是一个比较易用的ORM框架 ...

  4. 图片裁剪功能学习小结

    图片裁剪功能学习小结 近期有需要使用图片裁剪的功能,在使用插件和自己写裁剪组件之间犹豫了很久,后来根据需求经过反复的考虑,还是自己封装吧,毕竟自己动手,丰衣足食,对吧?嗯,??????是的!最后生成裁 ...

  5. c++ 使用throw抛出异常

    抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常.该语句的格式为: throw 表达式;     如果在try语句块的程序段中(包括 ...

  6. c++ try_catch throw

    c++ try_catch 1.基础介绍 try { //程序中抛出异常 throw value; } catch(valuetype v) { //例外处理程序段 } 语法小结:throw抛出值,c ...

  7. Java中如何引用文档对象模型_在JAVA中使用文档对象模型DOM经验小结

    文档对象模型 (DOM) 是一个文档标准,对于完备的文档和复杂的应用程序,DOM 提供了大量灵活性.DOM标准是标准的.它很强壮且完整,并且有许多实现.这是许多大型安装的决定因素--特别是对产品应用程 ...

  8. java 对象池 博客_Java对象池技术的原理及其实现的小结

    一起学习 Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 T2 T3.其中T1表示对象的创建时间,T2表示对象的 ...

  9. ASP.NET MVC升级到ASP.NET Core MVC踩坑小结

    写在前面 ASP.NET Core是微软新推出的支持跨平台.高性能.开源的开发框架,它的优势不必多说,因为已经说得太多了.当然,现在依然有着数量庞大的系统运行于.NET Framework上,由于有大 ...

最新文章

  1. EF 4.1+MVC3+Jquery Ajax+Json.Net+JqueryUI+IUnitOfWork+Repository 学习DEMO(暂停更新)
  2. [NodeJS]Node异步编程基础
  3. System.arraycopy
  4. 【阿里妈妈营销科学系列】第五篇:多渠道组合路径效率评价
  5. 第18次csp认证 201912-2 回收站选址(C++)
  6. linux oracle删除恢复数据恢复,Linux下Oracle误删除数据文件恢复操作
  7. Linux—scp或ssh出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  8. 使用springboot自带 MD5加密
  9. 用selenium IDE编写自动化测试脚本
  10. node.js如何升级
  11. vb python excel_【Python3+VBA】在Excel中生成小姐姐
  12. Unity流水账9:Timeline
  13. trigger()方法
  14. Only 64-bit build environments are supported beyond froyo/2.2
  15. 安装OpenSSH服务
  16. 工业用微型计算机08,自考《工业用微型计算机》02241 2008年真题 _ 重庆自考网
  17. js和jQuery获取浏览器窗口的高度、宽度的方法详解
  18. Model-Agnostic Meta-Learning (MAML)模型介绍及算法详解
  19. Coding and Paper Letter(十一)
  20. ssm+JSP计算机毕业设计疫情救灾物资管理系统6pdz4【源码、程序、数据库、部署】

热门文章

  1. WordPress通过插件发送邮件
  2. 华为云classroom应用_华为任正非:将来所有应用都会长在云土地上,但现在还不是...
  3. php 跨域web访问权限,php:跨域 Web程序 - 贪吃蛇学院-专业IT技术平台
  4. 【theano-windows】学习笔记十——多层感知机手写数字分类
  5. 【caffe-Windows】训练自己数据——数据集格式转换
  6. UFLDL教程:Exercise:Convolution and Pooling
  7. 【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)
  8. (转) android里,addContentView()动态增加view控件,并实现控件的顶部,中间,底部布局...
  9. ELK日志分析系统(转)
  10. CDN架构以及原理分析