打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
15.3.5 异常规范和C++11

15.3.5 异常规范和C++11


《C++ Primer Plus(第6版)(中文版)》第15章友元、异常和其他,本章先介绍一些C++语言最初就有的特性,然后介绍C++语言新增的一些特性。前者包括友元类、友元成员函数和嵌套类,它们是在其他类中声明的类;后者包括异常、运行阶段类型识别(RTTI)和改进后的类型转换控制。本节为大家介绍异常规范和C++11。

AD:2013大数据全球技术峰会低价抢票中

15.3.5  异常规范和C++11

有时候,一种理念看似有前途,但实际的使用效果并不好。一个这样的例子是异常规范(exception specification),这是C++98新增的一项功能,但C++11却将其摒弃了。这意味着C++11仍然处于标准之中,但以后可能会从标准中剔除,因此不建议您使用它。

然而,忽视异常规范前,您至少应该知道它是什么样的,如下所示:

 

其中的throw( )部分就是异常规范,它可能出现在函数原型和函数定义中,可包含类型列表,也可不包含。

异常规范的作用之一是,告诉用户可能需要使用try块。然而,这项工作也可使用注释轻松地完成。异常规范的另一个作用是,让编译器添加执行运行阶段检查的代码,检查是否违反了异常规范。这很难检查。例如,marm( )可能不会引发异常,但它可能调用一个函数,而这个函数调用的另一个函数引发了异常。另外,您给函数编写代码时它不会引发异常,但库更新后它却会引发异常。总之,编程社区(尤其是尽力编写安全代码的开发人员)达成的一致意见是,最好不要使用这项功能。而C++11也建议您忽略异常规范。

然而,C++11确实支持一种特殊的异常规范:您可使用新增的关键字noexcept指出函数不会引发异常:

 

有关这种异常规范是否必要和有用存在一些争议,有些人认为最好不要使用它(至少在大多数情况下如此);而有些人认为引入这个新关键字很有必要,理由是知道函数不会引发异常有助于编译器优化代码。通过使用这个关键字,编写函数的程序员相当于做出了承诺。

还有运算符noexcept( ),它判断其操作数是否会引发异常,详情请参阅附录E。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python练习:复习符号
掌握web前端应该学习javascript哪些内容
最简单的C#快速入门教程
C/C++基础知识:typedef用法小结
Python中定义函数的关键字是什么?
转载] ADS基础
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服