C++学习笔记-throw抛出异常

C++学习笔记-throw抛出异常

前言

         在学习C++数据结构的过程中,常常会见到如下的代码块:

template <class T>
T LinkList<T>::Get( int i)
{ //初始化
	Node<T> *p=first->next;
	int j=1;
	while (j!=i) && (p!=NULL)
	{
		p=p->next;
		j++;
	}
	if(p==NULL) throw “位置非法”;
	return p->data; 
}

         其中老师对于throw的解释是:如果满足条件,抛出异常。但在依样画葫芦后,却出现了以下的错误信息:
在这里插入图片描述
         于是便对throw的具体用法产生了好奇,故作此文以记。

C++异常处理

         在C++语言中,通常使用try,throw和catch语句去实现异常处理,示例如下:

#include <iostream>
using namespace std;

void ThrowError()
{
	int a;
	cin >> a;
	if (a == 0) throw 1;
	else if (a == 1) throw"字符串:输入的为1";
	else throw 100;
	cout << "throw后面的语句" << endl;
}

int main()
{
	try
	{
		ThrowError();
	}
	catch (int e)
	{
		switch (e)
		{
		case 1:
			cout << "输入的为0" << endl;
			break;
		default:
			cout << "输入的既不是0也不是1" << endl;
			break;
		}
	}
	catch (const char* e)
	{
		cout << e << endl;
	}
	cout << "catch后的语句" << endl;
	return 0;
}

         运行效果:
在这里插入图片描述
         接下来逐一解释各部分代码块

1. try{}
         try后面跟着的括号内的语句是代码的保护段,如果程序按照正常的顺讯执行到try语句,则执行try语句的内容。 如果try语句正常执行,则跟在try语句后面的catch不被执行。转而执行try语句后跟着的最后一个catch语句之后执行程序。 相反,如果try语句不正常执行,则执行catch内的语句。

2. throw
         throw的基本语法:

throw 表达式;//表达式可以是基本数据类型,也可以是类

         通过该语句抛出异常。通过运行示例可以发现,在try语句块中,若成功抛出一个异常,则throw之后的语句都将不再被执行。

3. catch
         如果 try 块执行的过程中拋出了异常,那么拋出异常后立即跳转到第一个“异常类型”和拋出的异常类型匹配的 catch 块中执行,执行完后再跳转到最后一个 catch 块后面继续执行。
         如果抛出的异常没有被捕获,那么程序会立刻终止,出现前言所述的情况。

后记

         throw抛出异常的做法在遇到需要动态申请和释放内存、涉及指针操作的时候,可以比较有效地发现如野指针,指针悬挂等问题。故此记录。

发布了3 篇原创文章 · 获赞 1 · 访问量 96

猜你喜欢

转载自blog.csdn.net/weixin_45817309/article/details/105215427
今日推荐