본문 바로가기
[R&D] 프로그래밍/C, C++

[C++] 자료형 확인 방법 (type_info name)

by Geuni 2022. 7. 19. 23:07
728x90
반응형

C++에서도 Python의 type() 처럼 type_info class에서 제공하는 typeid().name()을 통해 자료형을 확인할 수 있습니다.

#include <iostream>
#include <typeinfo>
using namespace std;

int main(void)
{
    cout << "void               : " << typeid(void).name() << endl;
    cout << "bool               : " << typeid(bool).name() << endl;
    cout << "float              : " << typeid(float).name() << endl;
    cout << "double             : " << typeid(double).name() << endl;
    cout << "char               : " << typeid(char).name() << endl;
    cout << "unsigned char      : " << typeid(unsigned char).name() << endl;
    cout << "short              : " << typeid(short).name() << endl;
    cout << "unsigned short     : " << typeid(unsigned short).name() << endl;
    cout << "int                : " << typeid(int).name() << endl;
    cout << "unsigned int       : " << typeid(unsigned int).name() << endl;
    cout << "long               : " << typeid(long).name() << endl;
    cout << "unsigned long      : " << typeid(unsigned long).name() << endl;
    cout << "long long          : " << typeid(long long).name() << endl;
    cout << "unsigned long long : " << typeid(unsigned long long).name() << endl;

    return 0;
}

 

void               : v
bool               : b
float              : f
double             : d
char               : c
unsigned char      : h
short              : s
unsigned short     : t
int                : i
unsigned int       : j
long               : l
unsigned long      : m
long long          : x
unsigned long long : y

 

동작시 아래와 같이 예상과 다르게 잘려서 보이는 현상이 나타나는데, typeid는 런타임 과정에서 데이터의 타입을 가져옵니다. 이는 RTTI(Run Time Type Information) 기술에서 실시간으로 데이터 타입을 확인할 때 사용한다고 합니다.

 

위와 같은 문제는 컴파일 과정을 거친이후 타입에 대한 정보들은 이미 기계어로 바뀌었기 때문에 런타임에서 정보를 획득하는 typeid의 경우 제대로 동작하지 않을 수 있다고 생각됩니다.

728x90
반응형

댓글