Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 블록 및 유형 변환 캐치

<시간/>

이 섹션에서는 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되는 동안 기본 형식 개체로 변환되지 않습니다.