language_typeid
language_typeid (typeid 연산자)
타입에 대한 정보를 질의해요. 다형적 객체의 동적 타입을 알아야 할 때와 정적 타입 식별에 사용돼요. std::type_info 객체를 돌려줘요.
출처: cppreference
본문
문법
typeid ( type ) // (1)
typeid ( expression ) // (2)
typeid 표현식은 정적 저장 기간을 가진 객체를 참조하는 lvalue 표현식이에요. 그 객체는 다형적 타입 std::type_info 또는 그에서 파생된 타입의 const-한정 버전이에요.
typeid를 쓸 때 표준 라이브러리의 std::type_info 정의가 보이지 않으면 프로그램은 ill-formed예요.
설명
type이나 expression의 타입이 클래스 타입이거나 클래스 타입에 대한 참조라면, 그 클래스 타입은 불완전 타입일 수 없어요.
-
type을 나타내는std::type_info객체를 참조해요.type이 참조 타입이면 결과는 참조된 타입의 cv-unqualified 버전을 나타내는std::type_info객체를 참조해요.
-
expression을 검사해요.
expression이 다형적 타입(가상 함수를 하나 이상 선언하거나 상속받는 클래스)의 객체를 식별하는 glvalue 표현식이면, 실행 시간에 실제 동적 타입을 결정해 그에 해당하는std::type_info객체를 참조해요.- 그 외의 경우,
expression의 정적 타입을 기준으로std::type_info객체를 참조해요.
typeid 표현식은 전체 표현식(full-expression)의 끝에서 파괴되지 않는 임시 std::type_info 객체에 대한 lvalue를 산출해요.
#include <typeinfo>
struct Base { virtual ~Base() {} };
struct Derived : Base {};
Base* pb = new Derived;
typeid(*pb) == typeid(Derived); // true: 실행 시간 동적 타입
typeid(pb) == typeid(Base*); // true: 포인터의 정적 타입
다형적 객체의 참조·포인터에 typeid를 쓰면 실행 시간에 실제 파생 타입을 알 수 있고, 그 외에는 정적 타입을 반환해요.