catch (...)를 사용하는 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 된 후에도 계속 throw되어 결국 프로그램이 계속 충돌합니다.

요약 : 오류가 발생한 후 프로그램이 다양한 예외를 포착하지 못하도록하여 프로그램이 충돌없이 정상적으로 실행될 수 있도록하려면 catch (...)를 추가하고 다시 포착하는 것이 가장 좋습니다. 프로그램이 충돌없이 계속 실행되도록하려면 catch에 throw를 추가하여 예외를 다시 throw하지 마십시오.

추천

출처blog.csdn.net/qq_23350817/article/details/108968669