1、简介
注意:typeid是操作符,不是函数。这点与sizeof类似)
运行时获知变量类型名称,可以使用 typeid(变量).name()
需要注意不是所有编译器都输出”int”、”float”等之类的名称,对于这类的编译器可以这样使用。
int ia = 3;
if(typeid(ia) == typeid(int))
{
cout <<"int" <<endl;
}
2、RTTI
RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。
在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和typeid
-
dynamic_cast允许运行时进行类型转换,从而使程序能够在一个类层次结构中安全地转化类型,与之相对应的还有一个非安全的转换操作符static_cast
-
typeid是C++的关键字之一,等同于sizeof这类的操作符。typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义)
如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算;
否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。