이 섹션에서는 C++에서 예외 처리 및 유형 변환을 위해 catch 블록을 사용하는 방법을 살펴봅니다.
먼저 코드를 보고 어떤 결과가 나올지, 어떻게 생성되는지 알아보겠습니다.
예시
#include <iostream> using namespace std; int main() { try{ throw 'a'; } catch(int a) { cout << "Integer value is caught :" << a; } catch(...) { cout << "Entering into default catch block"; } }
출력
Entering into default catch block
그 이유는 무엇입니까? 이런 종류의 출력이 생성되는 이유는 무엇입니까? 우리가 볼 수 있듯이 '문자'가 던져졌지만 첫 번째 catch 블록은 int용입니다. 'a'의 ASCII가 정수라고 생각하면 첫 번째 블록에 들어갈 것이지만 그런 종류의 변환은 catch 블록에 적용되지 않습니다.
다른 예를 보자. 이 예에서는 던져진 객체에 대해 변환 생성자가 호출되지 않는 것을 볼 수 있습니다.
예시
#include <iostream> using namespace std; class TestExcept1 {}; class TestExcept2 { public: TestExcept2 (const TestExcept1 &e ){ // Defining the Conversion constructor cout << "From the Conversion constructor"; } }; main() { try{ TestExcept1 exp1; throw exp1; } catch(TestExcept2 e2) { cout << "Caught TestExcept2 " << endl; } catch(...) { cout << "Entering into default catch block " << endl; } }
출력
Entering into default catch block
파생 형식 개체는 파생 형식 개체가 throw되는 동안 기본 형식 개체로 변환되지 않습니다.