c++捕获异常中使用catch(...)以及throw与否的崩溃问题对比

1、不使用catch(…)

int main()
{
	try
	{
		int da = 0;
		int data = 1 / da;
	}
	catch (const std::exception& e)
	{
		std::cout << "error:" << e.what() << std::endl;
	}
	
	std::cout << "finish" << std::endl;

	while (1);
	return 0;
}

运行结果如下:
在这里插入图片描述

未能捕获异常,程序崩溃退出。

2、添加catch(…)

int main()
{
	try
	{
		int da = 0;
		int data = 1 / da;
	}
	catch (const std::exception& e)
	{
		std::cout << "error:" << e.what() << std::endl;
	}
	catch (...)
	{
		std::cout << "error unknown" << std::endl;
	}

	std::cout << "finish" << std::endl;

	while (1);
	return 0;
}

运行结果如下:
在这里插入图片描述
异常捕获成功,程序运行正常、不退出。

3、使用了catch(…),但是添加了throw

int main()
{
	try
	{
		int da = 0;
		int data = 1 / da;
	}
	catch (const std::exception& e)
	{
		std::cout << "error:" << e.what() << std::endl;
	}
	catch (...)
	{
		std::cout << "unkonwo" << std::endl;
		throw;
	}

	std::cout << "finish" << std::endl;

	while (1);
	return 0;
}

运行结果如下:
在这里插入图片描述
程序在catch(…)里面被捕获,然是在throw后将异常继续抛出,最终导致程序仍然崩溃。

总结:当要防止程序出现错误后能够捕获各种异常、使程序仍能正常运行不崩溃,最好加上catch(…)再进行捕获一次。如果想让程序不崩溃继续运行,不要在catch里面添加throw将异常再次抛出。

猜你喜欢

转载自blog.csdn.net/qq_23350817/article/details/108968669
今日推荐