C++_异常1-调用abort()
异常是相对较新的C++功能,有些老式编译器可能没有实现。另外有些编译器可能默认关闭这一特性,需要使用编译器选项来打开它。
这里先讨论一个基本问题:
2.0 * x * y / (x+y)
如果y是x的负值,则上述公式将导致被零除。这是一种不允许的运算。很多新式编译器通过生产一个表示无穷大的特殊浮点值来处理。
例如Inf,inf,INF等。
对于这种问题,处理方式之一就是,如果其中一个参数是另一个参数的负值,则调用abort()函数。
Abort()函数的原型位于头文件cstdlib中,其典型实现是向标准错误流发送消息abnormal program termination(程序异常终止),然后终止程序。
它还返回一个随实现而异的值,告诉操作系统,实现失败。
abort()函数是否刷新文件缓冲区取决于实现。
如果愿意,也可以使用exit(),该函数刷新文件缓冲区,但不显示消息。
文件缓冲区:用于存储读写到文件的数据的内存区域。
#error1.cpp --using the abort() function
#include <iostream>
#include <cstdlib>
double hmean(double a, double b); int main()
{
double x,y,z;
std::cout<<"Enter two numbers:";
while()
{
z=hmean(x,y);
std::cout<<"Harmonic mean of"<<x<<"and"<<y
<<"is"<<z<<std:endl;
std::cout<<"Enter next set of numbers<q to quit>:"; }
std::cout<<"Bye!\n";
return ;
} double hmean(double a, double b)
{
if(a == -b)
{
std::cout<<"untenable arguments to hmean()\n";
std::abort();
}
return 2.0*a*b/(a+b);
}
为了避免异常终止,程序应在调用hmean()函数之前检查x和y的值。然而,依靠程序员来执行这种检查是不安全的。
C++_异常1-调用abort()的更多相关文章
- C++异常 调用abort()
以一个计算两个数的调和平均数的函数为例.两个数的调和平均数的定义是:这两个数倒数的平均值的倒数,因此表达式为:1.0 * x * y / (x + y)如果y是x的负值,则上述公式将导致被零除——一种 ...
- C++_异常9-异常的注意事项
一.先讨论异常被引发后,可能导致的问题 意外异常: 如果它是在带异常规范的函数中引发的,则必须与规范列表中的某种异常匹配,否则为意外异常.在默认情况下,这将导致程序异常终止(虽然C++11摒弃了异常规 ...
- C++_异常3-异常机制throw try catch
下面介绍如何使用异常机制来处理错误. C++异常是对程序运行过程中发生的异常情况的一种响应. 异常提供了将控制权从程序的一部分传递到另一部分的途径. 对异常的处理有3个组成部分: 1)引发异常 -- ...
- 在使用 CryptoAPITransform进行加密时异常要调用Reset()
在使用 CryptoAPITransform进行加密时异常要调用Reset() 通过.net源码能看到Reset()里有 public void Reset() { _depadBuffer = nu ...
- phpcms标签整理_当前栏目调用
phpcms标签整理_当前栏目调用 转载 **//SQL语句调用: {pc:get sql="select * from phpcms_category where catid in($ca ...
- 记一次Task抛异常,调用线程处理而引发的一些随想
记一次Task抛异常,调用线程处理而引发的一些随想 多线程调用,任务线程抛出异常如何在另一个线程(调用线程)中捕获并进行处理的问题. 1.任务线程在任务线程执行语句上抛出异常. 例如: private ...
- ca71a_c++_指向函数的指针_通过指针调用函数txwtech
/*ca71a_c++_指向函数的指针_通过指针调用函数用typedef简化函数指针的定义简化前: bool(*pf)(const string&, const string &); ...
- cc38b_demo_C++_异常_(2)txwtech在异常中使用虚函数-多态
//cc38b_demo,21days_C++_异常_(2)txwtech20200121在异常中使用虚函数-多态 //--异常层次结构//*异常的类-创建自己的异常类//*异常派生-就是继承//*异 ...
- 黑马程序员:Java编程_异常
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 异常即对问题的描述,将问题进行对象的封装. 1. 异常体系:Throwable ...
随机推荐
- JSP标签 <meta> 的作用
meta标签: meta标签共有两个属性,它们分别是http-equiv属性和name属性. name 属性 : <meta name="Generator" contect ...
- LINUX下用C语言历遍目录 C语言列出目录 dirent.h在C/C++中的使用
LINUX下历遍目录的方法一般是这样的打开目录->读取->关闭目录相关函数是opendir -> readdir -> closedir #include <dirent ...
- 面试题:各大公司Java后端开发面试题总结 已看1 背1 有用 链接有必要看看
ThreadLocal(线程变量副本) --整理 Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个 ...
- caret 分类回归树 用法
http://topepo.github.io/caret/feature-selection-overview.html
- jqgrid控件列分组
<%-- builed by manage.aspx.cmt [ver:2014.48.11] at 2014/10/11 16:48:33 --%> <%@ Page Langua ...
- TP5多入口设置
今天在用tp5做项目的时候发现,前台是可以绑定默认到index模块的,但是后台不好弄,于是查了一下手册,按照手册上说的,复制了index.php改为admin.php,作为后台的入口文件,于是域名/a ...
- 20169219 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 一.程序设计中临时变量的使用 任务: //定义一个数组 int arr[] = {1,2,3,4,5,6,7,8}; //打印原始数组的值 for(int i:arr ...
- LibreOJ 6004 圆桌聚餐 (最大流)
题解:天啊,这道最大流真是水的一批……只需要每张桌子向每个单位建一条容量为1的边,源点向桌子建边,容量为桌子能坐的人数;单位向汇点建边,容量为单位人数即可,然后根据单位与桌子的连边值是否为一来了解每个 ...
- db2中临时表在存储过程中的使用
DROP PROCEDURE ADMINISTRATOR.SP_TEST (INTEGER, CHARACTER ()); CREATE PROCEDURE administrator.sp_test ...
- sqlTransaction 简单的应用
sqlTansaction表示要在 SQL Server 数据库中处理的 Transact-SQL 事务 static void Main(strng[] args) { //往数据库里面插入数据 s ...