C++ 异常捕捉与处理(try...catch...)

首先举一个异常处理的例子:ios

string str = "0123456789";

char ch1 = str[100];    //数组越界,可是不提醒,程序运行当即崩溃
cout << ch1 << endl;
    
char ch2 = str.at[100];    //数组越界,使用成员函数at()来进行异常捕获,程序没法运行
cout << ch2 << endl;

这里C++对指针越界进行了异常处理,使用string类中的at()成员函数进行判别;数组

 

本篇文章主要介绍在C++中Try{...}Catch{...}对程序异常的处理;函数

****************************************************************************************************************************************spa

 

一:首先经过实例引入:

#include <iostream>
using namespace std;

double division(float a,float b)
{
	if (!b)
	{
		cout << "除数不能为0 !";
	}
	return a / b;
}
int main()
{
    float a,b;
    cout << "Enter A B: ";
    cin >> a >> b;
    while(true)
    {
        cout << division(a,b) << endl;
    }
    return 0;
}

可是当除数真的为0的时候,仍然输出了一些咱们不想要的信息,由于最后的函数最后必需要由return返回一个值。 指针

如何让inf、-nan(ind)不显示呢?code

★直接点来讲就是如何让if()语句中的错误条件被断定成立后,就对程序进行截断而再也不继续执行if()语句后面的命令blog

    这样return就将不会被执行。ci

 - > -> ->源码

这里将程序进行截断(由于b=0是异常状况,因此称之为异常处理)就要使用到try{...}与catch{...};string

 

 

二:try{...}与catch{...}的使用

1> 语法结构:

try
{
    throw ...
}
catch( ...' type )
{
    cout << "Err_infomation! " << endl;
}

2> 上述问题解决方案 (源码):

#include <iostream>
using namespace std;

double division(float a,float b)
{
	if (!b)
	{
		throw "Error! 除数不能为0!";
	}
	cout << "【当b=0的时候,这里是不会执行的】" << endl;
	return a / b;
}


int main()
{
	float a, b;
	while(true)
	{
		cout << "Please enter A B : ";
		cin >> a >> b;
		try
		{
			cout << "A/B= " << division(a, b) << endl;
		}
		catch (const char *error)
		{
			cout << error << endl;
		} 
		catch (...)    //捕获其余未知错误
		{
			cout << "Unknown Error !" << endl;
		}
	}
	return 0;
}

 3> 运行结果:

4> 难点解释: