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()使用小结相关推荐
- 解析Objective-C中多态、动态类型和动态绑定
解析Objective-C中多态.动态类型和动态绑定 转自http://mobile.51cto.com/iphone-285157.htm Objective-C中多态.动态类型和动态绑定是本文要介 ...
- struts2文件上传大小限制问题小结(引用)
最后解决办法: 页面js控制上传文件的大小,在页面进行控制.如下代码 inputs是所有文本上传input DOM //名称信息var nameStr='';//大小信息var sizeStr=''; ...
- IbatisNet开发使用小结
一. 介绍 平常做企业级应用,需求变化是经常的事,而很多基础代码重复也是很让人头疼的问题.所以很多人会使用一些ORM框架来增强项目的可维护性.可扩展性.IBatis.Net就是一个比较易用的ORM框架 ...
- 图片裁剪功能学习小结
图片裁剪功能学习小结 近期有需要使用图片裁剪的功能,在使用插件和自己写裁剪组件之间犹豫了很久,后来根据需求经过反复的考虑,还是自己封装吧,毕竟自己动手,丰衣足食,对吧?嗯,??????是的!最后生成裁 ...
- c++ 使用throw抛出异常
抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常.该语句的格式为: throw 表达式; 如果在try语句块的程序段中(包括 ...
- c++ try_catch throw
c++ try_catch 1.基础介绍 try { //程序中抛出异常 throw value; } catch(valuetype v) { //例外处理程序段 } 语法小结:throw抛出值,c ...
- Java中如何引用文档对象模型_在JAVA中使用文档对象模型DOM经验小结
文档对象模型 (DOM) 是一个文档标准,对于完备的文档和复杂的应用程序,DOM 提供了大量灵活性.DOM标准是标准的.它很强壮且完整,并且有许多实现.这是许多大型安装的决定因素--特别是对产品应用程 ...
- java 对象池 博客_Java对象池技术的原理及其实现的小结
一起学习 Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 T2 T3.其中T1表示对象的创建时间,T2表示对象的 ...
- ASP.NET MVC升级到ASP.NET Core MVC踩坑小结
写在前面 ASP.NET Core是微软新推出的支持跨平台.高性能.开源的开发框架,它的优势不必多说,因为已经说得太多了.当然,现在依然有着数量庞大的系统运行于.NET Framework上,由于有大 ...
最新文章
- Spring 容器AOP的实现原理——动态代理
- Spring MVC--自定义HttpMessageConverter接收JSON格式的数据
- C++包含头文件几种方式
- mysql show timestamp_mysql中 datatime与timestamp的区别说明
- Freescale MC9S08AW60汇编学习笔记(五)
- 解决错误:Re-installation failed due to different application signatures
- OS- -死锁(二)
- 人口预测和阻尼-增长模型_使用分类模型预测利率-第2部分
- 为了养成NLP卷王,我画了一张路线图
- mybatis没有导入sqlsessionfactory包_MyBatis——搭建第一个MyBatis
- 【Redis】redis JedisDataException: ERR Client sent AUTH, but no password is set
- MSSQL数据库中发现D99_Tmp数据表的处理办法
- oracle10g em 产生log,如何创建Oracle10G EM dbcontrol
- 闻乐天授江州司马 [唐] 元稹
- 八叶一刀流·三之型·业炎击团队
- paip.c#.net 设置窗体关闭提醒
- 数据库建模工具PowerDesigner的基本使用方法
- 英语语法基础篇-书写规则
- Arduino 控制RFID读写器读写 IC卡
- Python—标准遗传算法求函数最大值代码实现
热门文章
- 数据库设计笔记——MySQL基础知识(四)
- [转] 常见WinCE启动失败原因分析
- 浙大远程教育计算机作业3,2016浙大远程教育计算机应用基础作业-3剖析
- python 按月份分组_django ORM queryset按月、周、TruncMonth分组
- sql server numeric 可存几位小数_想成为优秀SQL高手?你就差这些细节
- java farm tycoon_Idle Farm Tycoon
- ubuntu 安装kde桌面_在Ubuntu 20.04系统上安装KDE Plasma Desktop的方法
- cad线性标注命令_CAD线性标注如何使用的
- range函数python2和3区别_range函数python2和3区别
- 【Ogre-windows】实例配置