动态运行时类型识别与显示转换(typeid(a);static_cast(expression);dynamic_cast(expression);const_cast

Effective C++不建议使用类型转换,在之前文章的基础上本文重新对强制类型转换进行了整理。包括typeid(a);static_cast(expression);dynamic_cast(expression);const_cast(expression);reinterpret_cast(expression))

1typeid(a),返回指针或引用所指对象的实际类型

 

typeid可以获取到一个对象或引用的确切类型,这在多态编程下非常有用。

要使用typeid,首先确保你的编译器开启了运行时类型检查(RTTI)。

 

visual studio中打开该项目的"属性页" -> "C/C++" -> "语言"修改"启用运行时类型信息"属性为是即可

class Base {};  
class Derived : public Base {};  
int main()  
{  
    Derived d;  
    Base& b = d;  
    cout << typeid(b).name() << endl;  
}  

最终输出的却是"class Base",而不是正确的"class Derived"(不同编译器输出的内容可能不一样)

 

原因是Base类没有定义任何虚函数,所以对于编译器来说Base

你可能感兴趣的:(C++)