typeid
- typeid(数据类型 / 表达式):运算符用来获取一个表达式的类型信息。类型信息对于编程语言非常重要,它描述了数据的各种属性:
- 对于基本类型(int、float 等C++内置类型)的数据,类型信息所包含的内容比较简单,主要是指数据的类型。
- 对于类类型的数据(也就是对象),类型信息是指对象所属的类、所包含的成员、所在的继承关系等。
- .name() 用来返回类型的名称。.raw_name() 用来返回名字编码(Name Mangling)算法产生的新名称。.hash_code() 用来返回当前类型对应的 hash 值。hash 值是一个可以用来标志当前类型的整数,有点类似学生的学号、公民的身份证号、银行卡号等。不过 hash 值有赖于编译器的实现,在不同的编译器下可能会有不同的整数。
- 例如,下面的语句显示指针pg指向的对象所属的类定义的字符串:
cout << "Now processing type " << typeid(*pg).name() << ".\n";
- typeid 会把获取到的类型信息保存到一个 type_info 类型的对象里面,并返回该对象的常引用;当需要具体的类型信息时,可以通过成员函数来提取。
- typeid运算符使得能够确定两个对象是否为同种类型。它与sizeof有些相像,可以接受两种参数:
类名;
结果为对象的表达式。
- typeid运算符返回一个对type_info对象的引用,其中,type_info是在头文件typeinfo(以前为typeinfo.h)中定义的一个类。
- 例如,如果pg指向的是一个Magnificent对象,则下述表达式的结果为bool值true,否则为false:
typeid(Magnificent) == typeid(*pg)
- 如果pg是一个空指针,程序将引发bad_typeid异常。