throw()使用小结

为什么要加一个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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乘法表

叙述性说明 法表或许将会扎根于我们一生的记忆,如今让我们重温那些温暖的记忆,请编程输出九九乘法表. 如今要求你输出它的格式与寻常的 不同啊! 是那种反过来的三角形啦,详细例如以下图: 每两个式子之前用一个空格 隔开。。。 输…

DropDownList实现无限级分类

要想实现无限级分类,那得还用传统的老方法----递归,也许有很多人会抱怨递归的性能不是太理想。俗话说的话,能抓到老鼠的猫就是好猫。我提倡先解决问题,然后再优化性能。 数据库结构: 代码: protectedvoidGe…

50张非常精美的Apple主题桌面壁纸(上篇)

今天这篇文章向大家分享50张非常精美的Apple主题桌面壁纸,果粉们赶紧来下载啊。 Blue Apple wallpaper Apple Lawn .wallpaper. by ~VertigoStudio A quite simple Wallpaper, without mutch falderal Green Apple PSP by ~ARVQ Mac Apple Wallpapers With Android …

WPF- 关于自定义Calendar控件

由于项目对更改日期 时间的需要,接触了一下Calendar控件。结果发现在这么强大的控件的背后,微软其实并没有为开发人员留有很强的扩展性。 (项目要求的Calendar控件能对一些特定的日期进行特殊处理,如高亮,以及类似于Ou…

[文摘]上软解散相关

真实系列文摘 之 上海软星仙剑开发组解散真正内幕-----附.上软人最后留给玩家的话我不是个疯狂的仙剑迷, 但我有朋友是; 我不是个对看不管惯的社会现象能挺身而出的人, 但还是喜欢去在意去关心那些事...下面这个算不上是什么新闻了, 但如过是玩过仙剑系列觉得还不错的人, 对游戏…

Apache Spark 1.5发布,新特性一览

Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。Apache Spark社区刚刚发布了1.5版本,明略数据高级工程师梁堰波解析了该版本中的众多新特性&am…

js正则表达exec和match的区别(转)

转自:http://blog.csdn.net/fushou/article/details/6934608 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用。 最近开发遇到一些需要使用正则表达式&#…

微软推出免费在线系统诊断工具--不用手动下载

在运行框中输入以下地址:\\live.sysinternals.com,所有工具都在Tools下,Files目录有可供下载的压缩包。。Microsoft Corp. has launched a beta service that lets Windows users launch the Sysinternals library of free diagnostic and tr…

开源软件

邮件服务器: Postfixftp服务器: vsftpd统计: nginx access log awstats 统计: google统计 google分析 腾讯分析 分布式锁及配置管理:Zookeeper php框架:thinkphp运维监控: cacti数据同步&#…

cad.net 获取所有已经安装的cad版本信息

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\Hardcopy 转载于:https://www.cnblogs.com/JJBox/p/11381254.html

Restangular的使用

2019独角兽企业重金招聘Python工程师标准>>> // First way of creating a Restangular object. Just saying the base URL var baseAccounts Restangular.all(accounts); // This will query /accounts and return a promise. baseAccounts.getList().then(functio…

浅析数据质量检查

What are the four broad categories of data quality checks? Provide an implementation technique for each. 数据质量检查的四大类是什么?为每类提供一种实现技术。 答:数据质量检查是ETL工作中非常重要的一步,主要关注一下四个方面。 1…

在用dw.GetSqlSelect()获得到的Sql语句出现PBSELECT( VERSION的解决办法

在用dw.GetSqlSelect()获得到的Sql语句出现PBSELECT( VERSION的解决办法: 把数据窗口的数据源转换到syntax模式下就行了 ! 转载于:https://www.cnblogs.com/Tonyyang/archive/2008/06/03/1212689.html

刚发现的2011年最给力的春联

上联:房价涨.地价涨.油价涨.电价涨.水价涨.粮价涨.肉价涨.蛋价涨.菜价涨.药价涨.这也涨.那也涨.怎一个涨字了得.涨了还涨。 下联:上学难.参军难.就业难.买房难.租房难.择偶难.结婚难.育儿难.就医难.养老难.男也难.女也难.看世间难字当头.难上加难 横批:活…

SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题

SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题 基于物理块变化的复制,没有并行也是很快的。 逻辑复制的日志是按事务结束的时间排序的,而物理复制是与事务无关的,只要发生了改变,就可以立即传送到备库&…

VSS不需要验证自动登录的问题

新项目要开始了,搭建好开发环境以及项目框架后,遇到第一个问题就是我自己的机子打开VS不需要登陆VSS就直接打开了解决方案,而其他的同事则没有遇到这样的情况,于是搜索了下原因,发现是设置问题: 1,在VSS管理器中》工具》选项》允许网络用户名自动登录 这个选项去掉 …

说说“开源杀死商业开发工具”

今天在Solidot看到一条很有意思的短文,标题是“开源杀死商业开发工具”,其文如下: UNA,源自拉丁形容词“together”,是一种协作式的实时源代码开发环境,允许两个或更多的开发者同时编辑相同的代码。支持大部…

ubuntu22.04 安装vscode

安装 Visual Studio Code(VSCode)在 Ubuntu 22.04 系统上是一个简单的过程。以下是步骤指南: 更新系统软件包列表: 打开终端,并执行以下命令来更新您的系统软件包列表: sudo apt update安装依赖包&#xff…

(转)一篇令所有游戏圈的兄弟汗颜的文章

一篇让我看了一个小时的文章,看到了自己的粗浅,有些问题也许只有加入游戏行业了才更有体会1、无休止的抄袭回想起上个世纪末,华人游戏圈还处于原始阶段,那时候随便竖几条枪占个山头就敢说自己是做游戏的,拿出来的东西勉…

mybatis学习教程中级(十)mybatis和ehcache缓存框架整合(重点)

1、前言 前面讲解了mybatis的一级、二级缓存。一级然并卵(spring整合后),二级还是有用的。我们现在来看看用ehcache来维护管理二级缓存。不要问我为什么,因为都这么用!!!java是框架语言&#x…