异常规范,出现在声明函数中,表示这个函数可能抛出异常的类型
void GetTag() throw();表示不会抛出任何异常
void GetTag() throw(int);表示只抛出int类型异常
throw(int),并不表示一定会抛出异常,但是一旦抛出异常只会抛出int类型,如果抛出非int类型异常,调用unexsetpion()函数,退出程序。
void GetTag() throw();表示不会抛出任何类型异常
void GetTag() throw(...);表示抛出任何类型异常
void GetTag() throw(int);表示只抛出int类型异常
加一个throw()属性到你的永远不会抛出异常的函数中,编译器会知道代码的意图和决定优化方式。
代码如下:
class MyClass
{
size_t MethodThatCannotThrow() throw()
{
return 0;
};
void ExampleMethod()
{
try
{
MethodThatCannotThrow();
}
catch (...)
{
}
}
};
但是,调用的函数都已经标记了throw(),实际上不需要try/catch。
捕抓double异常,代码如下:
#include<iostream.h> //包含头文件
#include<stdlib.h>
#define MIN_VALUE (1e-8) //根据需要调整这个值
#define IS_DOUBLE_ZERO(d) (abs(d) < MIN_VALUE)
double fuc(double x, double y) //定义函数
{
if(IS_DOUBLE_ZERO(y))
{
throw y; //除数为0,抛出异常
}
return x/y; //否则返回两个数的商
}
void main()
{
double res;
try //定义异常
{
res=fuc(2,3);
cout<<"The result of x/y is : "<<res<<endl;
res=fuc(4,0); //出现异常
}
catch(double) //捕获并处理异常
{
cerr<<"error of dividing zero.\n";
exit(1); //异常退出程序
}
}