반응형

c++ typeid 연산자

출처 https://docs.microsoft.com/ko-kr/cpp/cpp/typeid-operator?view=vs-2019

typeid(type-id)

typeid(expression)

 

  • typeid 연산자를 사용 하면 런타임에 개체의 형식을 확인할 있음
  • typeid 결과값은 const type_info& 이다, 

출처 https://docs.microsoft.com/ko-kr/cpp/cpp/type-info-class?view=vs-2019

class type_info {

public:

    type_info(const type_info& rhs) = delete; // cannot be copied

    virtual ~type_info();

   

//--연산자 오버로딩

    _CRTIMP_PURE bool operator==(const type_info& rhs) const;

    type_info&            operator=(const type_info& rhs) = delete; // cannot be copied

    _CRTIMP_PURE bool operator!=(const type_info& rhs) const;

//연산자 오버로딩--

 

 

_CRTIMP_PURE int before(const type_info& rhs) const;

 

    size_t hash_code() const;

    size_t hash_code() const noexcept;

    _CRTIMP_PURE const char* name() const;

    _CRTIMP_PURE const char* raw_name() const;

};

 

 

 

typeid(자료형 또는 변수이름 또는 함수이름 또는 인스턴스 등등).name() 실행하면

자료형의 이름을 리턴한다

 

 

또한 리턴하는 자료형의 이름은 const char* 라는 것을 있다

혹시나 해서 const의 위치까지 구분해서 리턴하는지 테스트 해봤는데

const 의 위치까지 따로 구분해서 리턴하지는 않는다

참고로 포인터 변수는 const의 위치에 따라서 아래와 같이 수정 가능한 부분이 다르다

 const 자료형*  : 역참조 값을 수정 X , 가리키는 주소는 수정 O

 자료형* const  : 역참조 값을 수정 O, 가리키는 주소 수정 X

 const 자료형* const : 역참조값 수정 X, 가리키는 주소 수정 X

 

그러나 typeid(자료형).name() 으로 위 사항들까지는 구별 할 수 없다.

그저 자료형 앞에 const 가 있으면 출력할때

"자료형 const" 으로 출력하고

포인터 변수인 경우 "자료형 * const" 로 출력한다

 

 

거의   모든   자료형의   이름을  const char * 로  리턴받을 수   있다 .

 

반응형

+ Recent posts