728x90
반응형
1. 핵심 개념
#include <iostream>
#include <typeinfo>
int main() {
int n1 = 10;
auto n2 = n1; // n2의 타입은? int
const std::type_info& t1 = typeid(n2);
std::cout << t1.name() << std::endl;
}
코드를 작성하다보면 이 타입이 정말 int일까? 하는 경우가 있다.
이때, 실행시간에 타입의 정보를 알아낼 수 있는 방법이 있다.
① RTTI (Run Time Type Information)
=> 실행시간에 타입의 정보를 얻을 때 사용하는 기술
2. RTTI 기술을 사용하려면
① <typeinfo> 헤더를 포함한다.
② typeid 연산자를 사용하면
③ 타입의 정보를 담은 type_info 객체를 얻을 수 있다.
④ type_info 객체의 멤버 함수 name() 사용
실행결과
g++ 컴파일러
i
cl 컴파일러
int
실행결과를 보면 int로 뜨는 것을 볼 수 있다.
g++은 i로 뜨는데 이는 내부적으로 int를 i로 표현하고 있어서 나오는 것인데,
이 결과를 명확하게 int로 표현하고 싶다면 파일명 | c++filt -t 로 int를 볼 수 있다.
3. 자세한 내용
#include <iostream>
#include <typeinfo>
int main() {
auto n1 = 10;
typeid(n1);
typeid(int);
typeid(3 + 4.2);
const std::type_info& t = typeid(1);
std::cout << t.name() << std::endl;
}
① typeid
=> 타입에 대한 정보를 얻을 때 사용하는 연산자
=> 다양한 형태로 사용할 수 있다.
=> typeid 연산자의 결과로 const std::type_info&가 반환된다.
② std::type_info
=> 타입의 정보를 담고 있는 클래스
=> 사용자가 직접 객체를 만들 수는 없고, typeid() 연산자를 통해서만 얻을 수 있다.
=> 멤버 함수인 name을 통해서 타입의 이름을 얻을 수 있다.
4. 타입 조사, 비교
#include <iostream>
#include <typeinfo>
int main() {
auto n1 = 10;
const std::type_info& t1 = typeid(n1);
const std::type_info& t2 = typeid(int);
if ( t1 == t2 ) {
std::cout << "equal" << std::endl;
}
if ( typeid(n1) == typeid(int) ) {
std::cout << "equal" << std::endl;
}
std::cout << t.name() << std::endl;
}
① 타입을 출력하는 것이 아닌 조사하고 싶다면
=> 2개의 type_info 객체를 == 연산자로 비교한다.
=> typeid의 결과를 바로 비교해도 된다.
② 변수 n이 int타입인지 조사하는 일반적인 코드
728x90
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 연산자 재정의 (operator overloading) (0) | 2019.12.14 |
---|---|
[C++] 다중 상속 (multiple inheritance) (0) | 2019.12.03 |
[C++] 인터페이스 (interface) (0) | 2019.12.01 |
[C++] 추상 클래스 (abstract class) (0) | 2019.11.30 |
[C++] 가상 소멸자 (0) | 2019.11.30 |