首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个错误处理的有关问题。帮看看

2012-05-16 
一个异常处理的问题。帮看看。#include iostreamusing namespace stddouble divide(double x, double y){

一个异常处理的问题。帮看看。
#include <iostream>
using namespace std;
double divide(double x, double y)
{
if(y == 0)
throw y;
return x/y;
}
int main(void)
{
float a, b;
try{
while(cin>>a>>b)
{
cout<<divide(a,b)<<endl;
}
}
catch(double)
{
cout<<"除数不能为0"<<endl;
}

cout<<"14535345"<<endl;
return 0;
}

我想问一下,比如说,抛出一个异常了以后,还会执行divide函数中的return语句吗?多谢帮忙解答。

[解决办法]
不会,程序流程会向上层追溯,一直到寻找到一个匹配的try-catch块,如果找不到,则程序异常终止。
[解决办法]
从div函数抛到main里,main里抓住就没事,没抓住会继续从main往上抛,不会继续往下执行的,main之上就是天堂了,挂掉。
[解决办法]
double divide(double x, double y)
{
if(y == 0)
throw y;
return x/y;
}

一旦执行到throw,那么控制流程就被转移到上层函数,divide的上层函数(就是调用它的函数)是main,所以就到main里面检查调用语句是否在try块中,如是,则寻找匹配的catch块,执行catch块中的代码,然后继续执行catch块之后的代码。如果在main都找不到(没有try或没有catch),程序异常终止。

这样够明白了吧。

热点排行