首页 > 编程语言 >c++ primer plus 第15章友,异常和其他:异常,15.3.5 异常规范和 C++11

c++ primer plus 第15章友,异常和其他:异常,15.3.5 异常规范和 C++11

时间:2024-07-08 21:00:11浏览次数:27  
标签:11 15.3 double 规范 C++ 异常 throw

c++ primer plus 第15章友,异常和其他:异常,15.3.5 异常规范和 C++11

15.3.5 异常规范和 C++11

文章目录


15.3.5 异常规范和 C++11

有时候,一种理念看似有前途,但实际的使用效果并不好。一个这样的例子是异常规范(exceptionspecification),这是 C++98 新增的一项功能,但 C++11却将其摒弃了。这意味着 C++11仍然处于标准之中,但以后可能会从标准中剔除,因此不建议您使用它。
然而,忽视异常规范前,您至少应该知道它是什么样的,如下所示:

double harm(double a)throw(bad thing); // may throw bad thing exception
double marm(double)throw();/doesn't throw an exception

其中的 throw()部分就是异常规范,它可能出现在函数原型和函数定义中,可包含类型列表,也可不包含异常规范的作用之一是,告诉用户可能需要使用try块。然而,这项工作也可使用注释轻松地完成。异常规范的另一个作用是,让编译器添加执行运行阶段检查的代码,检查是否违反了异常规范。这很难检查。例如,marm()可能不会引发异常,但它可能调用一个函数,而这个函数调用的另一个函数引发了异常。另外,您给函数编写代码时它不会引发异常,但库更新后它却会引发异常。总之,编程社区(其是尽力编写安全代码的开发人员)达成的一致意见是,最好不要使用这项功能。而 C++11也建议您忽略异常规范。然而,C++11确实支持一种特殊的异常规范:您可使用新增的关键字noexcept 指出函数不会引发异常:

double marm()noexcept;//marm()doesn't throw an exception

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

标签:11,15.3,double,规范,C++,异常,throw
From: https://blog.csdn.net/zhyjhacker/article/details/140278219

相关文章

  • c++ primer plus 第15章友,异常和其他:15.3.1 调用abort()02
    c++primerplus第15章友,异常和其他:15.3.1调用abort()02调用abort()02文章目录c++primerplus第15章友,异常和其他:15.3.1调用abort()0215.3.1调用abort()15.3.1调用abort()对于这种问题,处理方式之一是,如果其中一个参数是另一个参数的负值,则调用abort(......
  • c++ primer plus 第15章友,异常和其他:异常,15.3.3 异常机制
    #c++primerplus第15章友,异常和其他:异常,15.3.3异常机制异常,15.3.3异常机制文章目录15.3.3异常机制15.3.3异常机制程序清单15.9error3.cpp程序清单15.10excmean.h程序清单15.11error4.cpp15.3.3异常机制15.3.3异常机制下面介绍如何使用异常机制来处......
  • YC311A [ 20240701 CQYC省选模拟赛 T1 ] 好串(good)
    题意给定一个长度为\(n\)的\(01\)串。定义一个串是好的当且仅当该串的所有前缀以及所有后缀的\(1\)的数量大于等于\(0\)的数量。你需要维护\(q\)个查询,每次求\(S_{l,...,r}\)的子串最少添加的\(1\)的个数使得该子串是好的。Sol首先不难发现一个正确的贪心,也......
  • C#中的异常捕获 try catch finally
    处理异常提供的四个关键字,try...catch...finally...throwfinally最后,不管异常是否被抛出都会执行,例如打开一个文件,不管是否出现异常都需要关闭,throw:当问题出现的时候程序可以抛出一个异常,使用throw关键字抛出异常,try{执行的代码}catch(ExceptionNamee1){处理异常t......
  • P7411 [USACO21FEB] Comfortable Cows S (搜索)
    P7411[USACO21FEB]ComfortableCowsS搜索容易知道任意时刻的不合法的位置,并且决策只有将空着的位置补起来。每次加入一个点,判断其自身、上下左右是否变得不合法,往下递归即可。复杂度分析,每个点只会不合法一次(修改后就变得合法),所以只会遍历一次,复杂度是\(O(n^2)\)。#inclu......
  • ROS2开发BUG记录:在将 use_sim_timer 置为 true 时,节点的 Timer_Callback 行为“异常”
    问题:在将use_sim_timer置为true时,节点Timer_Callback行为“异常”。在回调函数中,使用self.get_logger().info("xxxx")输出信息,希望通过查看Info中的时间戳(如下),测试Timer_Callback回调频率是否正常。发现该时间戳与预期回调频率不符。[target_server-7][INFO][17......
  • 深入理解Spring Boot中的异常处理机制
    深入理解SpringBoot中的异常处理机制大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在任何应用程序开发中,异常处理都是至关重要的一部分。SpringBoot作为一个现代化的Java开发框架,提供了强大而灵活的异常处理机制,使开发者能够优雅地处理各种异常情况,保......
  • 11 字符集
    字符编码字符字符(Character)是各种文字和符号的总称,包括国家文字、标点符号、图形符号、数字等在计算机种看到的任何内容都是字符构成的字符编码字符编码(CharacterCode)是计算机针对各种字符在计算机中的一种二进制存储代号字符集字符集(Characterset)是多个字符的集合......
  • [NOIP2011 提高组] 聪明的质监员
    [NOIP2011提高组]聪明的质监员题目描述小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\)以及价值\(v_i\)。检验矿产的流程是:给定$m$个区间\([l_i,r_i]\);选出一个参数\(W\);对......
  • debian11 podman搭建rocketmq (初步测试)
    前言由于个人学习测试需要,想要在debian11环境下,使用podman搭建一个简单的单节点rocketmq,搭建过程比较繁琐,所以记录下来留作后续参考。由于对rocketmq镜像不熟悉,有些配置可能存在错误,会在后续有能力优化时继续更新此文档。后续可能会补充podman-compose实现方式,目前是shell脚本......