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" 로 출력한다
'C++' 카테고리의 다른 글
template singleton (0) | 2020.07.21 |
---|---|
template _ class template, function template, explicit instantiation (0) | 2020.03.16 |
References(L-value reference, R-value reference) (0) | 2020.03.13 |
C++ lvalue, rvalue, xvalue, glvalue, prvalue (0) | 2020.03.12 |
C++ Inheritance (상속) _ 다형성, 업캐스팅, 다운캐스팅 (0) | 2020.03.10 |