c++ typeid获取类型名之RTTI

关注公众号【高性能架构探索】,第一时间获取最新文章;公众号内回复【pdf】,免费获取经典书籍

typeid操作符的作用就是获取一个表达式的类型。返回结果是const type_info&。不同编译器实现的type_info class各不相同。但c++标准保证它会实现一个name()方法,该方法返回类型名字的c-style字符串。

如果typeid的操作数不是类类型或者是没有虚函数的类,则typeid指出该操作数的静态类型。如果操作数是定义了至少一个虚函数的类类型,则在运行时计算类型。

#include <iostream>  
#include <typeinfo.h>

class Base  
{  
public:  
    virtual void vvfunc() {}  
};

class Derived : public Base {};

using namespace std;

int main()  
{  
    Derived\* pd = new Derived;  
    Base\* pb = pd;

    cout << typeid( pb ).name() << endl;   // prints "class Base \*"  
    cout << typeid( \*pb ).name() << endl;  // prints "class Derived"  
    cout << typeid( pd ).name() << endl;   // prints "class Derived \*"  
    cout << typeid( \*pd ).name() << endl;  // prints "class Derived"

    delete pd;  
}

c++ RTTI还包括另外一个操作符dynamic_cast。有时间的时候,将c++ RTTI的知识整体梳理一下。

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/1313

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2022年12月5日 下午2:54
下一篇 2022年12月9日 上午9:52

相关推荐