C++学习之显示类型转换与运行时类型识别RTTI(三)
n.get();
return 0;
}
//输出为:
B::fun
B::get
typeid运算符允许向表达式提问:“你的对象是什么类型?”
typeid(e),其中e可以是任意表达式或类型的名字。操作结果是一个常量对象的引用。如果表达式为一个引用,则typeid返回该引用所引用对象的类型。如果e为数组或函数,则不会执行向指针的标准类型转换,如数组,会返回数组类型。当运算对象不属于类类型或者是一个不包含任何虚函数的类时,typeid运算符返回的是e的静态类型。当e是定义了至少一个虚函数的类的左值时,typeid的结果直到运行时才能求得。
当typeid作用于指针p时,返回的是该指针的静态编译时类型;当作用于指针所指的对象(*p)时,要在运行时才能求得返回类型。同时,如果指针p所指的对象的类型不含有虚函数,则p可以为一个无效的指针。否则,指针所指的对象(*p)将在运行时求值,此时p必须为一个有效的指针,如p此时为一个空指针,则typeid(*p)会抛出std::bad_typeid异常。